Как изменить регистр столбцов данных в списке? Я знаю, как сделать все столбцы заглавными, но я не знаю, как сделать только определенные столбцы заглавными.

d = {'name':['bob','john','sue'],'id':[545,689,143],'fte':[1,.5,.75]}
df = pd.DataFrame(d)
# list of columns I want to make upper case
cols = ['id','fte']

Это ничего не делает (без ошибок и случай не меняется):

df[cols].rename(str.upper,axis=1,inplace=True)
df


    name    id  fte
0   bob     545     1.00
1   john    689     0.50
2   sue     143     0.75
2
Dread 2 Май 2019 в 16:41

4 ответа

Лучший ответ

Это не сработает так, как вы пытаетесь это сделать, причина в том, что индексы не поддерживают изменяемые операции . Таким образом, вы могли бы использовать одно из представлений списка для генерации нового списка имен столбцов и переназначить его df.columns:

df.columns = [i.upper() if i in cols else i for i in df.columns]
print(df.columns)
# Index(['name', 'ID', 'FTE'], dtype='object')
5
yatu 2 Май 2019 в 13:52

Вы также можете использовать rename следующим образом

import pandas as pd

d = {'name':['bob','john','sue'],'id':[545,689,143],'fte':[1,.5,.75]}
df = pd.DataFrame(d)
# list of columns I want to make upper case
cols = ['id','fte']
newColumns = {oldName: oldName.upper() for oldName in cols}
df.rename(columns=newColumns, inplace=True)
print(df)
2
Prince Francis 2 Май 2019 в 13:55

Сначала вы можете создать карту:

# create map manually
col_map = {"id": "ID", "fte": "FTE"}
# or create map automatically
col_map = {item:item.upper() for item in list(df.columns)[1:]}

Затем замените индекс столбцов:

df = df.rename(columns=col_map)
0
DataPsycho 2 Май 2019 в 15:31

IIUC

df.rename(columns=dict(zip(cols,list(map(str.upper,cols)))))
Out[1135]: 
   name   ID   FTE
0   bob  545  1.00
1  john  689  0.50
2   sue  143  0.75
4
YO and BEN_W 2 Май 2019 в 13:58