【发布时间】:2015-12-20 15:03:27
【问题描述】:
0.17 之前的旧版本 pandas read_csv() 如何解释传递布尔值 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
如果用header=True阅读
即df = pandas.read_csv('test.csv', sep=';', header=True),
给出以下数据框:
1.0 10.0 100.0
0 2 20 200
1 3 30 300
表示pandas使用第二行(“第1行”)作为列名(推断的名称为'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 行”)作为标题,尽管我明确写了没有标题。
这种行为对我来说并不直观。有人可以解释发生了什么吗?
【问题讨论】:
-
CSV 数据 reads fine in versions 0.17+ 和
pd.read_csv(StringIO(dat), sep=';')问题是古代历史,似乎与 2015 年的旧 0.16 行为有关。传递布尔值pd.read_csv(... header=True)was obsoleted back in 2015;今天您使用 int、int 列表或“推断”。顺便说一句,整数从 0 开始,而不是 1。所以在你的情况下,你应该说“第 1 行被用作标题”而不是“第二行”。 -
无论如何,这些天
pd.read_csv(..., header=None)将禁止任何标题。我认为你描述的行为曾经是错误的,但它在 0.17 左右得到了修复。