Rom*_*man 13 python csv header pandas
我有一个csv文件,其中包含以下内容:
col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0
Run Code Online (Sandbox Code Playgroud)
然后我用以下方式用熊猫阅读它:
1.0 10.0 100.0
0 2 20 200
1 3 30 300
Run Code Online (Sandbox Code Playgroud)
结果我得到以下数据框:
df = pandas.read_csv('test.csv', sep=';', header=False)
Run Code Online (Sandbox Code Playgroud)
这意味着pandas使用第二个为列命名(列分别命名为1.0,10.0和100.0).如果read_csv()改为使用:
col1 col2 col3
0 1 10 100
1 2 20 200
2 3 30 300
Run Code Online (Sandbox Code Playgroud)
我得到下表:
col1;col2;col3
1.0;10.0;100.0
2.0;20.0;200.0
3.0;30.0;300.0
Run Code Online (Sandbox Code Playgroud)
这意味着pandas使用第一行作为标题,尽管我明确写明没有标题.
这种行为对我来说并不直观.有人能解释一下发生了什么吗?
EdC*_*ica 14
你告诉大熊猫你的标题行是什么行,通过传递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
Run Code Online (Sandbox Code Playgroud)
UPDATE
从版本开始,0.17.0这将提出一个TypeError