python - 在 for 循环期间删除列 - Pandas

标签 python pandas

我有两个基本的 DataFrame,我将它们组合成一个名为 dfCombo 的列表:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.arange(12,24).reshape(3,4), columns=['A', 'B', 'C', 'D'])
dfCombo = [df, df2]

它们都是 3x4 DF,有 4 列 A、B、C、D。

我可以使用 for 循环通过以下代码向两个 DF 添加一列:

for df3 in dfCombo:
    df3['E'] = df3['A'] + df3['B']

有了这个,df 和 df2 都会有一个新列 E。但是,当我尝试使用此方法和下面的代码删除一列时,没有任何列被删除:

for df3 in dfCombo:
    df3 = df3.drop('B', axis = 1)

for df3 in dfCombo:
    df3 = df3.drop(columns = ['B'])

如果我在单个 DF 上使用相同的代码,该列将被删除:

df2 = df2.drop('B', axis = 1)

df2 = df2.drop(columns = ['B'])

如果您能帮助我了解正在发生的事情,我将不胜感激。

最佳答案

你需要使用inplace=True:

for df3 in dfCombo:
    df3.drop('B', axis = 1, inplace=True)

哪个返回:

   A   C   D   E
0  0   2   3   1
1  4   6   7   9
2  8  10  11  17

    A   C   D   E
0  12  14  15  25
1  16  18  19  33
2  20  22  23  41

默认的 inplace=False 用于分配回原始数据框,因为它返回一个新副本。但是 inplace=True 对同一个副本进行操作并返回 None,因此无需分配回原始数据帧。

关于python - 在 for 循环期间删除列 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767869/

相关文章:

python - 减去 Pandas 中两个不平衡的 DataFrame

python - 如何使用 idxmax 输出对 pandas 数据框列进行子集化?

python - PyGTK TreeView 中的自动换行

python - 在Python中编写函数只保存最后一个字符串(Python)

python - 如何切片 2D Python 数组? : "TypeError: list indices must be integers, not tuple" 失败

python - 将列表映射到 1 和 0

python - Pandas Groupby 唯一多列

python - 类似 PEP 354 的枚举实现

python - 将列表列转换为字典列

python - 测试不同列中值是否存在