【发布时间】:2020-01-29 08:09:22
【问题描述】:
我正在尝试:
- 检查某个范围内的值是否存在于数据框中
- 如果不是,则添加值并进行插值。
参考this answer,我已经检查过它是否适用于单个数据帧。例如:
# 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
这显然不是我想要的结果。
造成这种差异的原因是什么? 使用多个数据帧的列表进行迭代是否是一种错误的方法?
【问题讨论】:
-
我建议在迭代修改 DataFrame 时最好使用
dict- 使用键df1,df2.... -
使用
for name, df in df_dict.items():进行迭代,并使用df_dict[name] = df进行分配似乎效果不佳:( -
解压回原来的变量名怎么样....所以在我建议的循环之后,最后一行将是
df1, df2, df3 = df_list -
更好的方法是
dict- imho :)