一尘不染

防止熊猫read_csv将第一行视为列名的标题

python

我读的pandas DataFrame使用pd.read_csv。我想保留第一行作为数据,但是它一直在转换为列名。

  • 我试过了,header=False但这只是完全删除了它。

(请注意输入数据:我有一个字符串(st = '\n'.join(lst)),我将其转换为类似文件的对象(io.StringIO(st)),然后csv从该文件对象进行构建。)


阅读 236

收藏
2020-12-20

共1个答案

一尘不染

您希望header=NoneFalsegets类型提升int0查看文档重点类别:

header:int或int列表,默认“ infer”行号(用作列名)以及数据的开头。如果未传递任何名称,则默认行为就像设置为0,否则设置为
None 。显式传递header =
0以便能够替换现有名称。标头可以是整数列表,这些整数指定列中多个索引的行位置,例如[0,1,3]。未指定的中间行将被跳过(例如,在此示例中为2)。请注意,如果skip_blank_lines
= True,则此参数将忽略注释行和空行,因此header = 0表示数据的第一行,而不是文件的第一行。

首先,您可以看到行为上的差异header=0

In [95]:
import io
import pandas as pd
t="""a,b,c
0,1,2
3,4,5"""
pd.read_csv(io.StringIO(t), header=0)

Out[95]:
   a  b  c
0  0  1  2
1  3  4  5

现在None

In [96]:
pd.read_csv(io.StringIO(t), header=None)

Out[96]:
   0  1  2
0  a  b  c
1  0  1  2
2  3  4  5

请注意,在最新版本中0.19.1,这将引发TypeError

In [98]:
pd.read_csv(io.StringIO(t), header=False)

TypeError:将布尔值传递给标头无效。使用header = None表示没有标题,或者使用header =
int或类似int的列表来指定组成列名称的行

2020-12-20