根据条件为列名添加后缀

add suffix to column name based on condition

我想为全是 nan 的列添加前缀“_nan”。我有以下代码可以打印我想要的内容,但不会重新分配实际数据框中的列,我不确定为什么。有谁知道为什么会这样?提前致谢

df = pd.DataFrame({ 'a':[1, 0, 0, 0],
                    'b':[np.nan, np.nan, np.nan, np.nan],
                    'c':[np.nan, np.nan, np.nan, np.nan]})
a = df.loc[:,df.isna().all()].columns

df[[*a]] = df[[*a]].add_suffix('_nan')

您可以使用列表理解:

df.columns = [x + '_nan' if df[x].isna().all() else x for x in df.columns]

输出:

    a   b_nan   c_nan
0   1     NaN     NaN
1   0     NaN     NaN
2   0     NaN     NaN
3   0     NaN     NaN

为什么会这样?

经过一些实验,我发现当您将 pandas.DataFrame 切片分配给 pandas.DataFrame 切片时,pandas 显然只关心列的顺序(在 list 中给出) ),而不是他们的名字,请考虑以下示例:

import pandas as pd
df_1 = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
df_2 = pd.DataFrame({'x':[10,20,30],'y':[400,500,600]})
df_1[['a','b']] = df_2[['x','y']]
print(df_1)

输出

    a    b  c
0  10  400  7
1  20  500  8
2  30  600  9

同时

...
df_1[['a','b']] = df_2[['y','x']]
print(df_1)

生产

     a   b  c
0  400  10  7
1  500  20  8
2  600  30  9