请问 pandas 的 DataFrame 中,用全是数字但是类型为字符的列如何按照实际值排序?

2017-11-08 09:43:40 +08:00
 praynise
例如,我有一个 dataFrame,结构为
0 '101
1 '1011'
2 '201'
如果直接按照第二个字段 sort_value 的话,排序会是 101,1011,201,但是我想让他的排序变成 101,201,1011,请问如何做呢?
谢谢大家
7749 次点击
所在节点    Python
7 条回复
p2pCoder
2017-11-08 09:55:02 +08:00
dataframe['你的字段名']=dataframe['你的字段名'].astype('int')
seven2016
2017-11-08 09:57:37 +08:00
import pandas as pd

data=['101','1011','201']

print(pd.DataFrame(data,columns=['id']).astype('int').sort_values(by='id',ascending=True))
praynise
2017-11-08 10:36:51 +08:00
怪我懒了(⊙﹏⊙)b 楼上二位提供的方法,都是单独拿出了 dataframe 中的一列排序,但是我是想对 dataframe 整体排序,例如
0 '101' 内容 A 内容 B
1 '1011' 内容 A 内容 B
2 ‘ 201 ‘ 内容 A 内容 B
这种的,我想对整体的 dataframe 做排序
p2pCoder
2017-11-08 11:06:27 +08:00
@praynise 你修改了类型 然后 sort_values(by='你的字段名'),不久可以了,上面的方法都是对 dataframe 整体进行排序
princelai
2017-11-08 11:10:02 +08:00
df = pd.DataFrame({'A':['101','1011','201'],'B':['foo','foo','bar'],'C':['bar','baz','baz']})
df['A'] = df['A'].astype(int)
df.sort_values(by='A')

楼上的方法都没问题啊

或者给你一个不同的方法
df.loc[df['A'].astype(int).sort_values().index]
seven2016
2017-11-08 11:15:51 +08:00
import pandas as pd

data = [['101','hi'],['1011','hello'],['201','wold']]
df = pd.DataFrame(data,columns=['id','str'])
df['id'] = df['id'].astype('int')
print(df.sort_values(by='id',ascending=True))
praynise
2017-11-08 12:18:56 +08:00
我傻了…我的错,谢谢楼上各位了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/404507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX