python - 如何通过索引位置在 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
以尊重先前的操作和在此执行的内容。
解决方案
我认为您需要通过以下方式选择列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
推荐阅读
- java - 启动层初始化期间发生错误。无法派生模块描述符
- r - 格式化棒棒糖图
- django - 使用 selenium / pytest 测试 Django 激活电子邮件。EMAIL_BACKEND="django.core.mail.backends.filebased.EmailBackend"
- javascript - 如何在节点项目中自动加载包含特定装饰器的文件
- c# - 使用任务异步方法加载集合视图
- python - 通过任务计划程序和 Python 脚本创建备份文件夹将 Date Modified 作为任务的日期
- javascript - 使用 absolutePan() 通过触摸事件在画布上移动背景图像和元素
- bluetooth - Raspberry Pi 4 和带蓝牙麦克风和扬声器的 Google Assistant
- git - 文件上的 git log 的 ClearCase 等价物是什么?
- python - Python timeit - TypeError:“模块”对象不可调用