Python 旧的0.17之前版本pandas.read_csv行为“header=True”用于推断头行?

Python 旧的0.17之前版本pandas.read_csv行为“header=True”用于推断头行?,python,csv,pandas,header,Python,Csv,Pandas,Header,pandasread_csv()的旧版本在0.17之前是如何解释传递布尔值header=True/False来推断头行的 我有CSV数据和标题: col1;col2;col3 1.0;10.0;100.0 2.0;20.0;200.0 3.0;30.0;300.0 如果读取时使用标题=True i、 e.df=pandas.read_csv('test.csv',sep=';',header=True), 这将给出以下数据帧: 1.0 10.0 100.0 0 2 20

pandas
read_csv()
的旧版本在0.17之前是如何解释传递布尔值
header=True
/
False
来推断头行的

我有CSV数据和标题:

col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0
如果读取时使用
标题=True
i、 e.
df=pandas.read_csv('test.csv',sep=';',header=True)
,

这将给出以下数据帧:

   1.0  10.0  100.0
0    2    20    200
1    3    30    300
这意味着熊猫使用第二行(“第1行”)作为列名(推断出的名称为“1.0”、“10.0”和“100.0”)

而如果使用
标题读取=False
提供以下信息:

   col1  col2  col3
0     1    10   100
1     2    20   200
2     3    30   300
这意味着pandas使用了第一行(“第0行”)作为标题,尽管我明确地写道没有标题


这种行为对我来说不是直觉。有人能解释一下发生了什么吗?

你在告诉熊猫你的标题行是哪一行,通过传递
False
这计算为
0
,这就是为什么它会像预期的那样在第一行中读取标题,当你传递
True
时,它计算为
1
,所以它会读取第二行,如果您传递了
None
,则它认为没有标题行,并将自动生成序号值

In [17]:    
import io
import pandas as pd
t="""col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0"""
print('False:\n', pd.read_csv(io.StringIO(t), sep=';', header=False))
print('\nTrue:\n', pd.read_csv(io.StringIO(t), sep=';', header=True))
print('\nNone:\n', pd.read_csv(io.StringIO(t), sep=';', header=None))

False:
    col1  col2  col3
0     1    10   100
1     2    20   200
2     3    30   300

True:
    1.0  10.0  100.0
0    2    20    200
1    3    30    300

None:
       0     1      2
0  col1  col2   col3
1   1.0  10.0  100.0
2   2.0  20.0  200.0
3   3.0  30.0  300.0
更新


由于版本
0.17.0
现在将引发一个

对于高于0.17.0的版本,您可以使用
header=0
而不是
header=True
来指定第一行作为头。使用
pd.read_CSV(StringIO(dat),sep=';)的CSV数据
这是一个古老的历史问题,似乎与2015年的0.16行为有关。传递布尔值;现在,您使用int、int列表或“推断”。顺便说一下,整数从0开始,不是1。因此,在您的情况下,您应该说“第1行用作标题”而不是“第二行”。无论如何,现在
pd.read\u csv(…,header=None)
将抑制任何标题。我认为你描述的行为曾经是有缺陷的,但它在0.17左右被修正了。
In [17]:    
import io
import pandas as pd
t="""col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0"""
print('False:\n', pd.read_csv(io.StringIO(t), sep=';', header=False))
print('\nTrue:\n', pd.read_csv(io.StringIO(t), sep=';', header=True))
print('\nNone:\n', pd.read_csv(io.StringIO(t), sep=';', header=None))

False:
    col1  col2  col3
0     1    10   100
1     2    20   200
2     3    30   300

True:
    1.0  10.0  100.0
0    2    20    200
1    3    30    300

None:
       0     1      2
0  col1  col2   col3
1   1.0  10.0  100.0
2   2.0  20.0  200.0
3   3.0  30.0  300.0