根据条件为列名添加后缀
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
我想为全是 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