【发布时间】:2018-12-20 16:25:56
【问题描述】:
我正在尝试将一个 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(data=d2)
bad = (df1['col2'] == 'ERROR')
这是我尝试过的(但它没有按我的预期工作):
df1.loc[bad,'col2'] = df2.loc[:,'col3']
print(df1)
col1 col2
0 1 a
1 2 c
2 3 d
3 4 NaN
4 5 e
但是,如果我将代码更改为以下内容,那么它确实可以工作:
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
【问题讨论】:
-
因为
df2.loc[:,'col3']的索引为[0, 1, 2],赋值会根据这些位置对齐到df1。 -
@coldspeed,我的解决方法是首选解决方法还是有更好的方法来解决问题?
-
不,我认为这是最轻松的方式。要么,要么分配一个列表
df2.loc[:,'col3'].tolist()