【问题标题】:Pandas read_table with duplicate names具有重复名称的 Pandas read_table
【发布时间】:2015-07-03 13:03:46
【问题描述】:

当在指定重复的列名时读取表 - 假设是两个不同的名称 - pandas 0.16.1 将一遍又一遍地复制数据的最后两列。

In [1]:
​
df = pd.read_table('Datasets/tbl.csv', header=0, names=['one','two','one','two','one']) 
df

tbl.csv 包含一个包含 5 个不同列的表。最后两个将重复而不是给出所有列。

Out[1]:
one two one two one
0   0.132846    0.120522    0.132846    0.120522    0.132846
1   -0.059710   -0.151850   -0.059710   -0.151850   -0.059710
2   0.003686    0.011072    0.003686    0.011072    0.003686
3   -0.220749   -0.029358   -0.220749   -0.029358   -0.220749

实际表格的每一列都有不同的值。在这里,重复相同的两列(对应于文件中的最后两列)。没有给出错误或警告。

您认为这是一个错误还是有意为之?我发现默默地改变这样的输入是非常危险的。还是我的无知?

【问题讨论】:

  • 我现在在文本中更明确了。输出由重复的两列组成。原始文件有 5 个不同的列。
  • 谢谢,我明白了。我的问题是为什么以这种方式处理它而不是给我一个错误。
  • 我认为它的设计目的是像这样工作,因为它会将名称分配给每一列,并且在 pandas\io\parsers.py 它从这些值 data = dict((k, v) for k, (i, v) in zip(names, data)) 构建一个字典,所以你用最后一列分配
  • 我认为这是一个非常有趣的错误:很好发现。 (也已在 Python 2.7 上确认)它也发生在 read_csv 上。我认为检查重复列名的开销可能值得这种情况所展示的总怪异。
  • 现在我们得到ValueError: Duplicate names are not allowed.

标签: python-3.x pandas


【解决方案1】:

在索引中使用重复值本质上是有问题的。 它们导致模棱两可。您认为可以正常工作的代码在具有非唯一索引的 DataFrame 上可能会突然失败。例如,argmax 可以在 DataFrame 在索引中有重复项时使用lead to a similar pitfall

最好避免在(行或 列)索引,如果可以的话。如果您需要使用非唯一索引,请谨慎使用。 仔细检查重复值对代码行为的影响。

在这种情况下,您可以使用

df = pd.read_csv('data', header=None) 
df.columns = ['one','two','one','two','one']

改为。

【讨论】:

  • 感谢您的回答。我理解重复值背后的问题。我的问题更多是关于不让通话失败的动机。我认为让您导入表格可能有更深层次的原因,然后给您一个以不明显方式更改的输出。我对 python 和 pandas 很陌生,我想也许我没有得到基本原理。如果您认为这是一个错误,我会报告它。
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多