Skip to main content
 首页 » 编程设计

python之追加列对 Pandas 来说很麻烦

2025年05月04日10del

这是我尝试过的以及我收到的错误:

>>> import pandas as pd 
>>> df = pd.DataFrame({"A":[1,2,3,4,5],"B":[5,4,3,2,1],"C":[0,0,0,0,0],"D":[1,1,1,1,1]}) 
>>> df 
   A  B  C  D 
0  1  5  0  1 
1  2  4  0  1 
2  3  3  0  1 
3  4  2  0  1 
4  5  1  0  1 
>>> import pandas as pd 
>>> df = pd.DataFrame({"A":[1,2,3,4,5],"B":[5,4,3,2,1],"C":[0,0,0,0,0],"D":[1,1,1,1,1]}) 
>>> first = [2,2,2,2,2,2,2,2,2,2,2,2] 
>>> first = pd.DataFrame(first).T 
>>> first.index = [2] 
>>> df = df.join(first) 
>>> df 
   A  B  C  D    0    1    2    3    4    5    6    7    8    9   10   11 
0  1  5  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
1  2  4  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
2  3  3  0  1  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0 
3  4  2  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
4  5  1  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
>>> second = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 
>>> second = pd.DataFrame(second).T 
>>> second.index = [1] 
>>> df = df.join(second) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 6815, in join 
    rsuffix=rsuffix, sort=sort) 
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 6830, in _join_compat 
    suffixes=(lsuffix, rsuffix), sort=sort) 
  File "C:\Python35\lib\site-packages\pandas\core\reshape\merge.py", line 48, in merge 
    return op.get_result() 
  File "C:\Python35\lib\site-packages\pandas\core\reshape\merge.py", line 552, in get_result 
    rdata.items, rsuf) 
  File "C:\Python35\lib\site-packages\pandas\core\internals\managers.py", line 1972, in items_overlap_with_suffix 
    '{rename}'.format(rename=to_rename)) 
ValueError: columns overlap but no suffix specified: Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype='object') 

我正在尝试创建包含额外列的新列表,我必须将这些列添加到主数据框 df 的特定索引处。
当我尝试 first 时,它起作用了,您可以看到输出。但是,当我用 second 以同样的方式尝试时,我收到了上述错误。

请告诉我在这种情况下我可以做什么并实现我期望的目标。

请您参考如下方法:

使用DataFrame.combine_first而不是 join 如果需要分配给之前创建的相同列,最后 DataFrame.reindex按预期排序的列列表:

df = pd.DataFrame({"A":[1,2,3,4,5],"B":[5,4,3,2,1],"C":[0,0,0,0,0],"D":[1,1,1,1,1]}) 
orig = df.columns.tolist() 
 
first = [2,2,2,2,2,2,2,2,2,2,2,2] 
first = pd.DataFrame(first).T 
first.index = [2] 
df = df.combine_first(first) 
 
second = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 
second = pd.DataFrame(second).T 
second.index = [1] 
df = df.combine_first(second) 
 
df = df.reindex(orig + first.columns.tolist(), axis=1) 
print (df) 
   A  B  C  D    0    1    2    3    4    5    6    7    8    9   10   11 
0  1  5  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
1  2  4  0  1  3.0  3.0  3.0  3.0  3.0  3.0  3.0  3.0  3.0  3.0  3.0  3.0 
2  3  3  0  1  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0 
3  4  2  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
4  5  1  0  1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN