我已经设置了一个DataFrame,以便将一列国家/地区名称设置为索引列。我想更改该索引列的标题。这似乎是一件简单的事情,但我无法找到如何实际做到这一点。怎么做到呢?指数"食品"此处的列更改为"国家"?
import pandas as pd
df = pd.DataFrame(
[
["alcoholic drinks" , 375, 135, 458, 475],
["beverages" , 57, 47, 53, 73],
["carcase meat" , 245, 267, 242, 227],
["cereals" , 1472, 1494, 1462, 1582],
["cheese" , 105, 66, 103, 103],
["confectionery" , 54, 41, 62, 64],
["fats and oils" , 193, 209, 184, 235],
["fish" , 147, 93, 122, 160],
["fresh fruit" , 1102, 674, 957, 1137],
["fresh potatoes" , 720, 1033, 566, 874],
["fresh Veg" , 253, 143, 171, 265],
["other meat" , 685, 586, 750, 803],
["other veg." , 488, 355, 418, 570],
["processed potatoes", 198, 187, 220, 203],
["processed veg." , 360, 334, 337, 365],
["soft drinks" , 1374, 1506, 1572, 1256],
["sugars" , 156, 139, 147, 175]
],
columns = [
"foods",
"England",
"Northern Ireland",
"Scotland",
"Wales"
]
)
df = df.set_index("foods")
df = df.transpose()
df = df.rename({"foods": "countries"})
df
答案 0 :(得分:2)
试试这个:
df = df.rename_axis("countries", axis=0).rename_axis(None, axis=1)
演示:
In [10]: df
Out[10]:
alcoholic drinks beverages carcase meat ...
countries
England 375 57 245
Northern Ireland 135 47 267
Scotland 458 53 242
Wales 475 73 227
答案 1 :(得分:2)
food
是您的列索引名称,而不是您的索引名称。
你可以像这样明确地设置它:
df.index.name = 'countries'
输出:
foods alcoholic drinks beverages carcase meat cereals cheese \
countries
England 375 57 245 1472 105
Northern Ireland 135 47 267 1494 66
Scotland 458 53 242 1462 103
Wales 475 73 227 1582 103
并且,要从列索引名称中删除food
:
df.columns.name = None
输出:
alcoholic drinks beverages carcase meat cereals cheese \
countries
England 375 57 245 1472 105
Northern Ireland 135 47 267 1494 66
Scotland 458 53 242 1462 103
Wales 475 73 227 1582 103
答案 2 :(得分:0)
Pandas有Index.rename() method.这样的作品:
import pandas as pd
df = pd.DataFrame(
[
["alcoholic drinks", 375, 135, 458, 475],
["beverages", 57, 47, 53, 73],
["carcase meat", 245, 267, 242, 227],
["cereals", 1472, 1494, 1462, 1582],
["cheese", 105, 66, 103, 103],
["confectionery", 54, 41, 62, 64],
["fats and oils", 193, 209, 184, 235],
["fish", 147, 93, 122, 160],
["fresh fruit", 1102, 674, 957, 1137],
["fresh potatoes", 720, 1033, 566, 874],
["fresh Veg", 253, 143, 171, 265],
["other meat", 685, 586, 750, 803],
["other veg.", 488, 355, 418, 570],
["processed potatoes", 198, 187, 220, 203],
["processed veg.", 360, 334, 337, 365],
["soft drinks", 1374, 1506, 1572, 1256],
["sugars", 156, 139, 147, 175]
],
columns=[
"foods",
"England",
"Northern Ireland",
"Scotland",
"Wales"
]
)
df.set_index('foods', inplace=True)
df = df.transpose()
print(df.head())
foods confectionery fats and oils fish fresh fruit ...
England 54 193 147 1102
Northern Ireland 41 209 93 674
Scotland 62 184 122 957
Wales 64 235 160 1137
重命名DataFrame的索引:
df.index.rename('Countries', inplace=True)
print(df.head())
foods confectionery fats and oils fish fresh fruit ...
Countries
England 54 193 147 1102
Northern Ireland 41 209 93 674
Scotland 62 184 122 957
Wales 64 235 160 1137
由于transpose()
,构成列的基础系列现在具有名称。我们需要做的就是将其重命名为空字符串:
df.columns.rename('', inplace=True)
print(df.head())
confectionery fats and oils fish fresh fruit ...
Countries
England 54 193 147 1102
Northern Ireland 41 209 93 674
Scotland 62 184 122 957
Wales 64 235 160 1137
答案 3 :(得分:0)
我不喜欢这个超过@ MaxU的答案,因为它的速度较慢,但对于任何值得的代码来说它都是更短的代码。
df.stack().rename_axis(['countries', None]).unstack()
alcoholic drinks beverages carcase meat cereals
countries
England 375 57 245 1472
Northern Ireland 135 47 267 1494
Scotland 458 53 242 1462
Wales 475 73 227 1582