我正在尝试:
- 检查数据框中是否存在某个范围内的值
- 如果不是,请添加该值并进行插值。
引用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
这显然不是我想要的结果。
造成这种差异的原因是什么? 使用多个数据帧的列表进行迭代是否是错误的方法?
最佳答案
您需要分配回列表,然后解压,例如:
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 - 对多个 pandas 数据帧执行相同操作的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59962829/