python - 对多个熊猫数据框执行相同操作的正确方法是什么?
问题描述
我在尝试着:
- 检查数据框中是否存在范围内的值
- 如果没有,请添加值并进行插值。
参考这个答案,我已经检查过它是否适用于单个数据框。例如:
# Original dataframe
code ratio
...
5 5.0 1.649561
6 6.0 1.466403
7 11.0 1.696970
8 12.0 1.646259
# Code to add row + interpolate
for i in range(5, 13):
if i not in df.values:
df.loc[-1, 'code'] = i
df = df.sort_values('code').reset_index(drop=True)
df = df.interpolate()
# Result
code ratio
0 5.0 1.649561
1 6.0 1.466403
2 7.0 1.581686
3 8.0 1.639328
4 9.0 1.668149
5 10.0 1.682559
6 11.0 1.696970
7 12.0 1.646259
检查它是否适用于单个数据帧,我希望它可以在我拥有的多个数据帧上完成。所以我尝试了以下代码,使用数据框列表进行迭代:
for df in [df1, df2, df3...]:
for i in range(5, 13):
if i not in df.values:
df.loc[-1, 'code'] = i
df = df.sort_values('code').reset_index(drop=True)
df = df.interpolate()
然后即使对于之前工作的数据框,它也会返回:
code ratio
5 5.0 1.649561
6 6.0 1.466403
7 11.0 1.696970
8 12.0 1.646259
-1 7.0 NaN
这显然不是我想要的结果。
是什么导致了这种差异?使用多个数据帧的列表进行迭代是一种错误的方法吗?
解决方案
您需要重新分配到列表中,然后解包,例如:
df_list = [df1, df2, df3...]
for i, df in enumerate(df_list):
for j in range(5, 13):
if j not in df.values:
df.loc[-1, 'code'] = j
df = df.sort_values('code').reset_index(drop=True)
df = df.interpolate()
df_list[i] = df
#Unpack back to original variables
df1, df2, df3, ... = df_list
推荐阅读
- python - Django-ValueError [无法创建用户,因为数据未验证]
- angular - 使用 angular-oauth2-oidc 打开其他选项卡时如何保持登录状态?
- swift - 使用 RxSwift 扩展目标动作方法
- c++ - 在自己的 Shell 中使用 Google 单元测试
- mysql - MYSQL 用字符串做错误的数学运算
- javascript - 涉及对象和原型的属性继承
- sql-server - 想要使用 End 中没有的参数来实现快捷方式,以便有效地使用快捷方式
- android - Android RecyclerView - 实现拖放而不重新排列元素
- javascript - 分配要更新的日期对象
- java - 在 Kotlin 中安全转换为泛型类型时出现异常