首页 > 解决方案 > 如何通过索引位置在 df 上插入后行?

问题描述

想象一下我有这些数据:

df = pd.DataFrame([['aa', np.nan, 'cc', 'dd', 'ee', np.nan, 'gg'], ['aa', 'bb', 'cc', 'cc', 'ee', 'dd', 'gg'], ['aa', 'bb', 'cc', 'cc', 'ee', 'dd', 'gg']]).T.rename(columns = {0: 'col_1', 1: 'col2', 2: 'col_3'})

    col_1   col2    col_3
0      aa     aa       aa
1      NaN    bb       bb
2      cc     cc       cc
3      dd     cc       cc
4      ee     ee       ee
5      NaN    dd       dd
6      gg     gg       gg

现在我提取有 nans 的行:

df_null = df[df['col_1'].isnull()]
df_null

    col_1   col2    col_3
1     NaN     bb       bb
5     NaN     dd       dd

然后我从主df中删除这些行,并在其中执行任何转换和操作:

df_no_null = df[~df['col_1'].isnull()]
df_no_null.do_stuff()....

现在,我获取具有nan值的行并用它们做更多的事情:

df_null.at[1, 'col_1'] = 'bb'
df_null.at[5, 'col_1'] = 'dd'

df_null

    col_1   col2    col_3
1      bb     bb       bb
5      dd     dd       dd

现在我要做的是将 的行重新插入df_null到原始行中df,但我想将这些行放回其原始索引位置,因此结果与原始 df 相同,其索引完好无损:

   col_1    col2    col_3
0     aa      aa       aa
1     bb      bb       bb
2     cc      cc       cc
3     dd      cc       cc
4     ee      ee       ee
5     dd      dd       dd
6     gg      gg       gg

我怎么能执行这样的操作pandas

笔记:

请注意,这只是一个玩具 df,所提供的答案应该以更大的df效率和更多的方式工作nans,更多的行可以插入到原始文件中df

非常感谢您提前

编辑:

必须将行重新插入df_no_null以尊重先前的操作和在此执行的内容。

标签: pythonpython-3.xpandasdataframe

解决方案


我认为您需要通过以下方式选择列DataFrame.loc

df.loc[df_null.index] = df_null
print (df)
  col_1 col2 col_3
0    aa   aa    aa
1    bb   bb    bb
2    cc   cc    cc
3    dd   cc    cc
4    ee   ee    ee
5    dd   dd    dd
6    gg   gg    gg

编辑:可以使用 For 循环解决方案:

for i in df_null.index:
    df.loc[i] = df_null.loc[i]
print (df)
  col_1 col2 col_3
0    aa   aa    aa
1    bb   bb    bb
2    cc   cc    cc
3    dd   cc    cc
4    ee   ee    ee
5    dd   dd    dd
6    gg   gg    gg

推荐阅读