【发布时间】: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