【问题标题】:Selecting columns with startswith in pandas在熊猫中选择带有startswith的列
【发布时间】:2020-02-11 19:30:40
【问题描述】:

您好,我有一个数据,我想重命名其中一个列并选择以t 字符串开头的列。

raw_data = {'patient': [1, 1, 1, 2, 2],
        'obs': [1, 2, 3, 1, 2],
        'treatment': [0, 1, 0, 1, 0],
        'score': ['strong', 'weak', 'normal', 'weak', 'strong'],    
        'tr': [1,2,3,4,5],
        'tk': [6,7,8,9,10],
        'ak': [11,12,13,14,15]

        }
df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score','tr','tk','ak'])

df

   patient  obs  treatment   score  tr  tk  ak
0        1    1          0  strong   1   6  11
1        1    2          1    weak   2   7  12
2        1    3          0  normal   3   8  13
3        2    1          1    weak   4   9  14
4        2    2          0  strong   5  10  15

所以我尝试关注python-pandas-renaming-column-name-startswith

df.rename(columns = {'treatment':'treat'})[['score','obs',df[df.columns[pd.Series(df.columns).str.startswith('t')]]]]

但出现此错误

TypeError: 'DataFrame' 对象是可变的,因此它们不能被散列

如何选择以t 开头的列?

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    转换为Series 不是必需的,但如果要添加到另一个列列表,请将输出转换为list

    cols =  df.columns[df.columns.str.startswith('t')].tolist()
    
    df = df[['score','obs'] + cols].rename(columns = {'treatment':'treat'})
    

    另一个想法是使用 2 个掩码并按| 链接按位OR

    通知

    在您的解决方案中,列名是从 rename 之前的原始列名中过滤出来的,因此稍后需要重命名。

    m1 = df.columns.str.startswith('t')
    m2 = df.columns.isin(['score','obs'])
    
    df = df.loc[:, m1 | m2].rename(columns = {'treatment':'treat'})
    print (df)
       obs  treat   score  tr  tk
    0    1      0  strong   1   6
    1    2      1    weak   2   7
    2    3      0  normal   3   8
    3    1      1    weak   4   9
    4    2      0  strong   5  10
    

    如果首先需要rename,有必要通过重命名的列名重新分配给过滤器:

    df = df.rename(columns = {'treatment':'treat'})
    df = df.loc[:, df.columns.str.startswith('t') | df.columns.isin(['score','obs'])] 
    

    【讨论】:

      【解决方案2】:
      #Select columns startswith "t"
      df = df[df.columns[df.columns.str.startswith('t')]]
      
      #Rename your column
      df.rename(columns = {'treatment':'treat'})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 2018-05-05
        • 1970-01-01
        • 2019-07-13
        • 2015-01-20
        • 2020-02-25
        • 2017-05-16
        • 1970-01-01
        相关资源
        最近更新 更多