我有一个 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
编辑:
我的原始数据框具有列名称 0
和 1
这就是为什么 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/