#pandas #dataframe
#pandas #фрейм данных
Вопрос:
Допустим, я работаю со следующим фреймом данных :
data = pd.DataFrame({'Country':['USA','UK','France','Germany'],
2006.0:[1,4,5,6],
2007.0:[5,4,8,5],
2008.0:[4,8,4,7]})
Я хотел бы изменить имена столбцов с плавающей запятой на целые числа, как я могу это сделать?
Ответ №1:
Попробуйте использовать это isinstance
, чтобы проверить тип данных и преобразовать объекты типа float в int. Затем переназначите имена столбцов.
data = pd.DataFrame({'Country':['USA','UK','France','Germany'],
2006.0:[1,4,5,6],
2007.0:[5,4,8,5],
2008.0:[4,8,4,7]})
data.columns = [int(i) if isinstance(i, float) else i for i in data.columns]
print(data)
Country 2006 2007 2008
0 USA 1 5 4
1 UK 4 4 8
2 France 5 8 4
3 Germany 6 5 7
Вы могли бы использовать a df.rename(columns = {"old name": "new name"})
для обработки только определенного переименования столбцов, но это только усложнило бы проблему.
РЕДАКТИРОВАТЬ: другой подход с boolean mask
и df.replace
, кажется сложным.
data = pd.DataFrame({'Country':['USA','UK','France','Germany'],
2006.0:[1,4,5,6],
2007.0:[5,4,8,5],
2008.0:[4,8,4,7]})
mask = data.columns.str.isnumeric()!=False
#[False True True True]
g = {k:int(k) for k,v in zip(data.columns, mask) if v==True}
#{2006.0: 2006, 2007.0: 2007, 2008.0: 2008}
data.rename(g, axis=1, inplace=True)
print(data)
Country 2006 2007 2008
0 USA 1 5 4
1 UK 4 4 8
2 France 5 8 4
3 Germany 6 5 7
Комментарии:
1. Так что, нет способа сделать это с помощью логической маски? Я пытался это сделать, но, похоже, многие атрибуты рядов недоступны для объектов индекса
2. Можете ли вы добавить свой подход к вопросу? Я не уверен, что вы имеете в виду
using a boolean mask
. Может быть, это поможет мне понять. Может быть, вы могли бы уточнить. Конечно, есть несколько способов сделать это.3. Например, Series.str.isnumeric() проверяет, содержат ли элементы ряда, которые являются ‘str’, числовые значения, и возвращает объект серии с True или False. Затем этот ряд можно использовать для изменения значений, которые проверяют условие
4. Здесь происходит примерно то же самое. Однако существует только 2 способа изменения имен столбцов.
pd.rename()
иdf.columns
. Во-первых, нужен dict с конкретными старыми и новыми именами, а во-вторых, нужен полный список имен.5. Ммм, понятно, я пытался сделать что-то вроде
df.columns[df.columns.isnumeric()] = df.columns[df.columns.isnumeric()].astype('int')
, но, думаю, мне придется делать это вручную.
Ответ №2:
Вы пытались переназначить
data.columns = ['Country', 2006, 2007, 2008]
Country 2006 2007 2008
0 USA 1 5 4
1 UK 4 4 8
2 France 5 8 4
3 Germany 6 5 7
Комментарии:
1. Это всего лишь пример, у меня может быть база данных с гораздо большим количеством столбцов