Pandas 更改数据框中某些列名的类型
假设我正在使用以下数据帧:Pandas 更改数据框中某些列名的类型,pandas,dataframe,Pandas,Dataframe,假设我正在使用以下数据帧: 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=['Country',2006、2007、2008] Country 2006 200
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=['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
尝试使用
isinstance
检查数据类型并将浮点型对象转换为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)
您可以使用df.rename(columns={“old name”:“new name”})
只处理特定的列重命名,但这只会使问题过于复杂
编辑:另一种带有
布尔掩码和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)
这只是一个例子,我可能有一个多列的数据库,所以没有办法使用布尔掩码来实现这一点?我一直在尝试这样做,但似乎系列的许多属性都不可用于索引对象。您是否添加了解决该问题的方法?我不知道你所说的使用布尔掩码的是什么意思。也许这能帮助我理解。也许你可以详细说明一下。当然,有多种方法可以执行此操作。例如,Series.str.isnumeric()可以测试序列中的“str”元素是否包含数值,并返回一个带True或False的Series对象。然后,这个系列可以用来更改验证条件的值。这里发生的情况与此类似。但是,只有两种方法可以更改列名pd.rename()
和df.columns
。第一个需要一个带有特定新旧名称的dict,第二个需要完整的名称列表。嗯,我明白了,我试图做一些类似于df.columns[df.columns.isnumeric()]=df.columns[df.columns.isnumeric()].astype('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]})
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