python - 对多个 pandas 数据帧执行相同操作的正确方法是什么?

标签 python pandas dataframe

我正在尝试:

  1. 检查数据框中是否存在某个范围内的值
  2. 如果不是,请添加该值并进行插值。

引用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/

相关文章:

python - PyQt4.QtCore.QVariant 对象而不是字符串?

python - 删除二维数组中具有相同值的行

python - Pandas 合并(左连接)的关键错误

不带索引列的 Python 数据透视 DataFrame

python - 用 Pandas DataFrame 中出现频率最高的单词替换单元格

python - 在Python包目录之外添加数据目录

python - 根据另一个数据帧将 pandas 数据帧拆分为两个数据帧

python - 从多个系列创建 DataFrame

python - 根据条件在 Dataframe 中乘以多列的最快方法

r - 创建满足某些条件的 data.fame