Я пытался очистить имена столбцов в кадре данных, но только часть столбцов.
Это не работает при попытке каким-либо образом заменить имена столбцов на фрагменте кадра данных, почему это так??
Допустим, у нас есть следующий фрейм данных:
Примечание , внизу - копируемый код для воспроизведения данных:
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
Я хочу очистить имена столбцов (ожидаемый вывод):
Value ColA ColB ColC
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
Подход 1 :
Я могу получить чистый столбецимена, подобные этому:
df.iloc[:, 1:].columns.str[:4]
Index(['ColA', 'ColB', 'ColC'], dtype='object')
Или
Подход 2 :
s = df.iloc[:, 1:].columns
[col[:4] for col in s]
['ColA', 'ColB', 'ColC']
Но , когда япопробуйте перезаписать имена столбцов, ничего не происходит:
df.iloc[:, 1:].columns = df.iloc[:, 1:].columns.str[:4]
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
То же самое для второго подхода:
s = df.iloc[:, 1:].columns
cols = [col[:4] for col in s]
df.iloc[:, 1:].columns = cols
Value ColAfjkj ColBhuqwa ColCouiqw
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
Это работает , но у вас естьвручную сопоставить имя первого столбца, что не идеально:
df.columns = ['Value'] + df.iloc[:, 1:].columns.str[:4].tolist()
Value ColA ColB ColC
0 1 a e i
1 2 b f j
2 3 c g k
3 4 d h l
Есть ли более простой способ добиться этого?Я что-то упустил?
Кадр данных для воспроизведения:
df = pd.DataFrame({'Value':[1,2,3,4],
'ColAfjkj':['a', 'b', 'c', 'd'],
'ColBhuqwa':['e', 'f', 'g', 'h'],
'ColCouiqw':['i', 'j', 'k', 'l']})