【问题标题】:add suffix to column name based on condition根据条件为列名添加后缀
【发布时间】:2021-09-07 00:48:28
【问题描述】:

我想将前缀“_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')

【问题讨论】:

    标签: python pandas rename


    【解决方案1】:

    您可以使用列表推导:

    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
    

    【讨论】:

      【解决方案2】:

      为什么会这样?

      经过一些实验,我发现当您将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
      

      【讨论】:

        猜你喜欢
        • 2018-11-10
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        • 2016-03-07
        • 2013-01-30
        • 2016-02-03
        相关资源
        最近更新 更多