我有一个包含以下内容的csv文件:
col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0
然后我用以下方式用熊猫阅读它:
df = pandas.read_csv('test.csv', sep=';', header=True)
结果我得到以下数据框:
1.0 10.0 100.0
0 2 20 200
1 3 30 300
这意味着pandas使用 second 为列命名(列名为1.0,10.0和100.0)。如果使用header = False
代替:
df = pandas.read_csv('test.csv', sep=';', header=False)
我得到下表:
col1 col2 col3
0 1 10 100
1 2 20 200
2 3 30 300
这意味着pandas使用第一行作为标题,尽管我明确写明没有标题。
这种行为对我来说并不直观。有人能解释一下发生了什么吗?
答案 0 :(得分:9)
你告诉大熊猫你的标题行是什么行,通过将False
这个评估结果传递给0
这就是为什么当你通过{{1时,它将第一行作为标题按预期读取的原因它评估为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
开始,这将提升TypeError