Выбор столбцов с запусками в пандах - PullRequest
2 голосов
/ 15 октября 2019

Привет! У меня есть данные, и я хочу переименовать один из столбцов и выбрать столбцы, начинающиеся со строки 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 -StarsWith

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

, но получив эту ошибку

TypeError: объекты 'DataFrame' являются изменяемыми, поэтому их нельзя хэшировать

Как выбрать столбцы, начинающиеся с t?

Thx

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Преобразовать в 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'])] 
0 голосов
/ 15 октября 2019
#Select columns startswith "t"
df = df[df.columns[df.columns.str.startswith('t')]]

#Rename your column
df.rename(columns = {'treatment':'treat'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...