简体   繁体   English

根据条件为列名添加后缀

[英]add suffix to column name based on condition

i want to add the prefix '_nan' to columns that are all nan.我想在全为 nan 的列中添加前缀“_nan”。 I have the following code that prints what I want but does not reassign the columns in the actual dataframe and I am not sure why.我有以下代码可以打印我想要的内容,但不会重新分配实际数据框中的列,我不确定为什么。 Does anyone have any ideas why this is happening?有没有人知道为什么会发生这种情况? Thanks in advance提前致谢

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')

You can use list comprehension:您可以使用列表理解:

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

Output:输出:

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

why this is happening?为什么会这样?

After some experiments I found that when you assign pandas.DataFrame slice to slice of pandas.DataFrame then pandas apparently does bother solely about order of columns (given in list ), not their names, consider following example:一些实验后,我发现,当你将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)

output输出

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

whilst同时

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

produce生产

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM