pandas read_csv不会将final(未命名)列捕获到datafram中

2024-09-27 07:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试读取以下格式的csv文件

myHeader
myJunk
myDate
A, B, C, D
, b, c, d
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING

当我使用

^{pr2}$

我得到以下错误(我的数据比上面的例子更复杂,但功能相同)

pandas._parser.CParserError: Error tokenizing data. C error: Expected 393 fields in line 9, saw 394

如何给额外的“信息”列命名并将这些字符串包含在我的数据帧中?在

[编辑]

我想出了如何跳过麻烦的行,但现在数据没有正确对齐

from StringIO import StringIO
s = """myHeader
myJunk
myDate
A, B, C, D
, b, c, d
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING"""

df = pd.read_csv(StringIO(s), header=3, skiprows=[4])
>>print df

            A       B       C                   D
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING

我想要的是:

A       B       C       D       MY_INFO
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING
dataA   dataB   dataC   dataD   EXTRA_INFO_STRING

Tags: csv数据infodfstring格式extrastringio
3条回答

如果只有标题后的行丢失EXTRA_INFO_STRING,则可以分别加载列名和数据:

from StringIO import StringIO
df = pd.read_csv(StringIO(s), header=None, skiprows=5)

以下代码(可能不是很优雅)将加载列名:

^{pr2}$

试验中使用的数据:

s = """myHeader
myJunk
myDate
A, B, C, D
, b, c, d
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING
dataA, dataB, dataC, dataD, EXTRA_INFO_STRING"""

怎么样:

df = pd.read_csv(StringIO(s), skiprows=5, header = None, index_col = False)
df.columns = list("ABCDE")

有时,如果read_csv数字转换有问题,可以添加dtype=object 进入read_csv调用并在以后自己使用处理转换数据帧.aType. 在

下面是一些我尝试过的方法,它似乎可以获得您想要的格式的数据。基本思想是“忽略所有有问题的行”(如果您了解文件结构,这是可能的)。在

x = pd.read_csv(StringIO.StringIO(s), names=['a', 'b', 'c', 'd', 'more_info'], header=None, skiprows=5)

这将以您想要的格式提供输出。在

我的经验是read_csv,在得到想要的之前,必须尝试一些组合。在

希望这有帮助。在

相关问题 更多 >

    热门问题