【问题标题】:Interesting results with duplicate columns in pandas.DataFramepandas.DataFrame 中重复列的有趣结果
【发布时间】:2020-12-11 16:35:18
【问题描述】:

pandas.DataFrame 中存在重复列时,任何人都可以帮助解释为什么我在某些操作中出现错误,而在其他操作中却没有。

最小的、可重现的示例

import pandas as pd
df = pd.DataFrame(columns=['a', 'b', 'b'])

如果我尝试在column 'a' 中插入一个列表,我会收到关于尺寸不匹配的错误:

df.loc[:, 'a'] = list(range(5))

Traceback (most recent call last):
...
ValueError: cannot copy sequence with size 5 to array axis with dimension 0

'b'类似:

df.loc[:, 'b'] = list(range(5))

Traceback (most recent call last):
...
ValueError: could not broadcast input array from shape (5) into shape (0,2)

但是,如果我插入到一个全新的列中,我不会收到错误,除非我插入到 'a''b'

df.loc[:, 'c'] = list(range(5))
print(df)

     a    b    b  c
0  NaN  NaN  NaN  0
1  NaN  NaN  NaN  1
2  NaN  NaN  NaN  2
3  NaN  NaN  NaN  3
4  NaN  NaN  NaN  4

df.loc[:, 'a'] = list(range(5))

Traceback (most recent call last):
...
ValueError: Buffer has wrong number of dimensions (expected 1, got 0)

如果我删除重复的列'b',所有这些错误都会消失


其他信息

pandas==1.0.2

【问题讨论】:

  • 这是重复的列名 - 请参阅此处询问:stackoverflow.com/questions/27065133/…
  • 我的 猜测 正在创建一个新列,首先创建一个系列,然后将其连接到数据框。分配的现有列尝试将值放入预先分配的位置
  • @AmyChodorowski - df['a'] = list(range(5))df['b'] = list(range(1,6)) 的工作情况如何?
  • 这个问题在 1.3.0 中仍然存在 - 尽管错误信息略有不同 ValueError: cannot copy sequence with size 5 to array axis with dimension 0。我想我会为此打开一个问题。
  • 对于任何有兴趣跟踪问题的人:github.com/pandas-dev/pandas/issues/38521

标签: python pandas dataframe


【解决方案1】:

为什么要使用 loc 而不仅仅是:

df['a'] = list(range(5))

这没有错误,似乎产生了你需要的东西:

a   b   b
0   NaN NaN 
1   NaN NaN 
2   NaN NaN 
3   NaN NaN 
4   NaN NaN 

同样用于创建 c 列:

df['c'] = list(range(5))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2020-11-29
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多