我有一个Panda的Dataframe,我需要以特定的方式重新索引。有几个编号的索引,但最后一个是字符串。如果不包含字符串,索引按数字顺序排列,1-20就好了。
但是,只要我包含字符串索引,该顺序就会切换为字母数字(1,11,12 ... 18,19,2,20,3,4等)。有没有办法我可以正确地数字组织列表,然后添加字符串索引而不改变列表的组织方式?
[编辑]:
我自己意识到了这个缺点。我以为我已经包含了数据框在构建后被转换为html安全表( DataTable )并显示在网页上。这可能会导致我遇到的问题,但欢迎任何有关此问题的见解。
我正在查看的数据框架的一个示例:
Column 1
0 Value 1
1 Value 2
2 Value 3
3 Value 4
...
18 Value 19
19 Value 20
string Value 21
答案 0 :(得分:0)
这些方面应该有效:
new_index = list(df.index)
new_index[-1] = 'string'
df.index=new_index
例如:
df=pd.DataFrame(np.random.random(5))
>>> df
0
0 0.665922
1 0.591298
2 0.274722
3 0.561243
4 0.382927
new_index = list(df.index)
new_index[-1] = 'string'
df.index=new_index
返回重新索引的df:
>>> df
0
0 0.665922
1 0.591298
2 0.274722
3 0.561243
string 0.382927
答案 1 :(得分:0)
这是一种方法。您可以分离数字和非数字索引并单独对它们进行排序。
df = pd.DataFrame({1: ['Val1', 'Val2', 'Val3', 'Val4', 'Val5']},
index=['0', '1', '11', '2', 'string'])
order1 = sorted((x for x in df.index if x.isdigit()), key=lambda i: int(i))
order2 = sorted(x for x in df.index if not x.isdigit())
df = df.loc[order1+order2]
# 1
# 0 Val1
# 1 Val2
# 2 Val3
# 11 Val4
# string Val5