【问题标题】:Old pre-0.17 pandas.read_csv behavior of `header=True` for inferring header row?用于推断标题行的“header = True”的旧0.17之前的pandas.read_csv行为?
【发布时间】: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 左右得到了修复。

标签: python csv pandas header


【解决方案1】:

您告诉熊猫哪一行是您的标题行,通过传递 False 这将计算为 0 这就是为什么它按预期在第一行中读取为标题,当您传递 True 它计算为 @ 987654325@ 所以它会读取第二行,如果你传递了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 版本开始,这将引发TypeError

【讨论】:

  • 对于高于 0.17.0 的 Pandas 版本,您可以使用 header=0 而不是 header=True 来指定第一行作为标题。
猜你喜欢
  • 2017-01-10
  • 1970-01-01
  • 2019-01-06
  • 2018-01-22
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多