python - df.rename 不会更改 df 列名称,但 df.columns 和 df.set_axis 会更改(Pandas)

标签 python pandas dataframe

我有一个 pandas 数据框,我想重命名其上的列

当我运行时:

df.rename(columns={0:"C", 1:"D"}, inplace=True)

没有发生任何变化,它仍然是原始的列名称。 但如果我这样做:

df.columns = ["C", "D"]

df.set_axis(["C", "D"],axis=1, inplace=True)

它有效。

为什么df.rename不起作用?

注意:我特别想重命名第一列和第二列,无论它们的名称是什么,它可能会改变(在我的情况下),所以我无法指定它。

示例:

df = pd.DataFrame({"A": pd.Series(range(0,2)),"B": pd.Series(range(2,4))})
df
    A   B
1   0   2
2   1   3

df = pd.DataFrame({"A": pd.Series(range(0,2)),"B": pd.Series(range(2,4))})
df.rename(columns={0:"C", 1:"D"}, inplace=True)
df
    A   B
1   0   2
2   1   3

df = pd.DataFrame({"A": pd.Series(range(0,2)),"B": pd.Series(range(2,4))})
df.columns = ["C", "D"]
df
    C   D
0   0   2
1   1   3

df = pd.DataFrame({"A": pd.Series(range(0,2)),"B": pd.Series(range(2,4))})
df.set_axis(["C", "D"],axis=1, inplace=True)
df
    C   D
0   0   2
1   1   3

编辑:

我的原始数据框具有列名称 01 这就是为什么 df.rename(columns={0:"C", 1:"D "}, inplace=True) 有效。

示例:

df = pd.DataFrame([range(2,4), range(4,6)])
df
    0   1
0   2   3
1   4   5

df.rename(columns={0:"C", 1:"D"}, inplace=True)
df
    C   D
0   2   3
1   4   5

最佳答案

如果您不想使用旧名称重命名,可以zip当前列并传入所需的项目数。

如果您使用的是 Python 3.7+,则顺序应为 preserved

也不要使用inplace=True

print(df)

   A  B
0  0  2
1  1  3

df.rename(columns=dict(zip(df.columns, ['C','E'])))

   C  E
0  0  2
1  1  3

df.rename(columns=dict(zip(df.columns, ['E'])))

   E  B
0  0  2
1  1  3

关于python - df.rename 不会更改 df 列名称,但 df.columns 和 df.set_axis 会更改(Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73218399/

相关文章:

通过 Python 执行 Javascript

python - 使用列车测试分割的维度问题

python - 计算一列字符串中的有效整数

python - 如何根据列前缀拆分 pandas 数据框

python - Pandas:保存某一类别特有的行

python - 旧 Plone 产品的自动化蛋化

python - 如何在带有参数的 block 上使用 Jinja2 过滤器

python - 根据严格的不平等和缺失数据过滤 Pandas 数据框

python - 计算每 5 行特定列的平均值,并选择 pandas 数据框中另一列的最后一个数据(第五个)

python - Pandas 在两个系列之间进行元素比较的最佳方法