我有两个具有两个重叠列的数据框:NumberID和Amount。我的NumberID不够独特,不足以在该列上进行简单的左连接,但是当与Amount结合使用时,它是唯一的。我希望能够在这两列中的值相等时将df2合并到df1上,如果不相等,则用NaN传递/填充。到目前为止,我已经编写了以下代码:
pd.merge(df1, df2, how='left', left_on=['Number', 'Amount'])
但是会引发以下错误:object of type 'NoneType' has no len()
我已经确认两个数据帧的两列中的任何一列都没有空值。但是,我确实在每个df中分散了空值(但在不同的列中)。有没有办法忽略NoneType值?还是有更好的方法来完成我想要的?我考虑过还要在df.iterrows中执行if语句,例如:
for rows, index in df1.iterrows:
if df1[['Number', 'Amount'] = df2[['Number', 'Amount']]
then rows(pd.concat([df1, df2], axis=1)
else pass
但是我的语法不太正确。有帮助吗?
答案 0 :(得分:0)
不是真正的解决方案(在没有一些示例数据的情况下很难重现),但至少我认为您的语法应遵循以下原则:
df1_2_list = []
for index, row in df1.iterrows(): #index should be before row and you missed parentheses
if len(df2[df2['Number', 'Amount'] == row['Number', 'Amount']]) >0: # You should check for the line 'row' instead of matching the whole df1. Here I sliced df2 based on the number and amount in the row from df1. If this is a match, the len(...) should return a length > 0
df1_2_list.append([row, df2[df2['Number', 'Amount'] == row['Number', 'Amount']]])
else:
df1_2_list.append([row])
df1_2 = pd.concat(df1_2_list, names=[df1.colums, df2.columns])
再次,这可能还行不通,但希望能为您指明正确的方向。
但是合并也应该可行。
能否仅发布df1 / df2的某些行(如果敏感,只要它能正确表示您的数据,就可以是伪数据)?