示例代码&输出:
data_country1 = {'Country': [np.NaN, 'India', 'Brazil'],
'Capital': [np.NaN, 'New Delhi', 'Brasília'],
'Population': [np.NaN, 1303171035, 207847528]}
df_country1 = pd.DataFrame(data_country1, columns=['Country', 'Capital', 'Population'])
data_country2= {'Country': ['Belgium', 'India', 'Brazil'],
'Capital': ['Brussels', 'New Delhi', 'Brasília'],
'Population': [102283932, 1303171035, 207847528]}
df_country2 = pd.DataFrame(data_country2, columns=['Country', 'Capital', 'Population'])
print(df_country1)
print(df_country2)
Country Capital Population
0 NaN NaN NaN
1 India New Delhi 1.303171e+09
2 Brazil Brasília 2.078475e+08
Country Capital Population
0 Belgium Brussels 102283932
1 India New Delhi 1303171035
2 Brazil Brasília 207847528
在第一个DataFrame中,对于由 ALL NaN
组成的每个行,我想用另一个数据帧中的一行替换整行。在此示例中,来自第二个数据帧的行0
,以便第一个df以与第二个数据帧相同的信息结束。
答案 0 :(得分:2)
您可以找到所有元素都有NaN
的行,并使用以下内容将其替换为其他数据框的行:
# find the indices that are all NaN
na_indices = df_country1.index[df_country1.isnull().all(axis=1)]
# replace those indices with the values of the other dataframe
df_country1.loc[na_indices,:] = df_country2.loc[na_indices,:]
这假设数据框的形状相同,并且您希望在缺失的行上匹配。
答案 1 :(得分:0)
我将加入两个数据帧:
data_complete=pd.merge(df_country1.dropna(),df_country2,on=['Country','Capital','Population'],how='outer')
答案 2 :(得分:0)
您可以使用append组合它们,删除任何重复项(两个数据框中的行),然后删除值为NaN的所有索引:
#combine into one data frame with unique values
df_country = df_country1.append(df_country2,ignore_index=True).drop_duplicates()
#filter out NaN rows
df_country = df_country.drop(df_country.index[df_country.isnull().all(axis=1)])
append中的ignore_index标志为每一行提供唯一索引,以便当您搜索具有NaN行的索引并返回0时,您不会从df_country2中删除0索引行。