Python 旧的0.17之前版本pandas.read_csv行为“header=True”用于推断头行?
pandasPython 旧的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
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