Python 熊猫数据帧到数据帧分配未对齐和生成NaN

Python 熊猫数据帧到数据帧分配未对齐和生成NaN,python,pandas,Python,Pandas,我试图将一个数据帧的值分配给另一个数据帧。然而,作业结果并不像我预期的那样,我也不知道为什么。我有一个变通办法,但是,我不明白为什么这个变通办法是必要的,或者它是否是首选的变通办法 我的数据设置如下: d1 = {'col1': [1,2,3,4,5], 'col2': ['a','ERROR','ERROR','ERROR', 'e']} df1 = pd.DataFrame(data=d1) d2 = {'col3': ['b','c','d']} df2 = pd.DataFrame(da

我试图将一个数据帧的值分配给另一个数据帧。然而,作业结果并不像我预期的那样,我也不知道为什么。我有一个变通办法,但是,我不明白为什么这个变通办法是必要的,或者它是否是首选的变通办法

我的数据设置如下:

d1 = {'col1': [1,2,3,4,5], 'col2': ['a','ERROR','ERROR','ERROR', 'e']}
df1 = pd.DataFrame(data=d1)
d2 = {'col3': ['b','c','d']}
df2 = pd.DataFrame(data=d2)
bad = (df1['col2'] == 'ERROR') 
这是我尝试过的(但它没有像我预期的那样工作):

但是,如果我将代码更改为以下内容,则它确实有效:

df1.loc[bad,'col2'] = df2.loc[:,'col3'].values
print(df1)

   col1 col2
0     1    a
1     2    b
2     3    c
3     4    d
4     5    e

解释
@coldspeed
注释

试试这个:

df1.loc[bad, 'col2'] 
这给了你

1    ERROR
2    ERROR
3    ERROR
Name: col2, dtype: object
正如您所观察到的,上述数据有索引1、2和3。现在检查df2索引

    col3
0   b
1   c
2   d

因此,当您使用
df1.loc[bad,'col2']=df2.loc[:,'col3']
替换时,只有第二个和第三个索引获取值。但是,当您使用
值时,您正在正确地进行操作,因为这形成了一个numpy数组,可以通过
类型(df2.col3.values)
或使用
类型(df2.col3.tolist())的python列表来验证。两者都可以接受。

因为
df2.loc[:,'col3']
的索引为[0,1,2],作业将根据这些位置与df1对齐。@coldspeed,我的解决方法是首选的还是有更好的方法解决问题?不,我认为这是最轻松的方法。或者指定一个列表
df2.loc[:,'col3'].tolist()
    col3
0   b
1   c
2   d