【发布时间】:2021-05-12 11:20:16
【问题描述】:
我想使用 rename 使用 lambda 函数重命名列的选定部分
import pandas as pd
df = pd.DataFrame({'pre_col1': [1, 2],
'pre_col2': [3, 4],
'pre_col3': [ 3, 29],
'pre_col4': [94, 170],
'pre_col5': [31, 115]})
# This works but it renames all of them
# df.rename(columns=lambda x: x.replace('pre_', ''))
# I'm only wanting to edit and rename a selection
df.iloc[:, 2:5] = (df.iloc[:, 2:5]
.rename(columns=lambda x: x.replace('pre_', '')))
print(df)
这会产生
pre_col1 pre_col2 pre_col3 pre_col4 pre_col5
0 1.0 3.0 NaN NaN NaN
1 2.0 4.0 NaN NaN NaN
我知道重命名列的方法有很多。我读过here、here 和here。
但为什么这种方式不起作用?为什么它会填满我试图用NaNs 更改的列??
【问题讨论】:
-
链接对我来说很好用
df.rename(columns=lambda x: x.replace("pre_","")).assign(x=1).rename(columns=lambda x: x.replace("c","cc")).rename(columns=lambda x: x.replace("cc","post_c"))一定是你的链中改变值的东西 -
您是否运行了问题中的确切代码?
-
@LeviBaguley 我运行了您的确切代码,但没有得到带有 NaN 的最终输出。在此输出之前您是否运行了任何其他步骤?