V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
praynise
V2EX  ›  Python

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

  •  
  •   praynise · 2017-11-08 09:43:40 +08:00 · 7726 次点击
    这是一个创建于 2574 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如,我有一个 dataFrame,结构为
    0 '101
    1 '1011'
    2 '201'
    如果直接按照第二个字段 sort_value 的话,排序会是 101,1011,201,但是我想让他的排序变成 101,201,1011,请问如何做呢?
    谢谢大家
    7 条回复    2017-11-08 12:18:56 +08:00
    p2pCoder
        1
    p2pCoder  
       2017-11-08 09:55:02 +08:00
    dataframe['你的字段名']=dataframe['你的字段名'].astype('int')
    seven2016
        2
    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
        3
    praynise  
    OP
       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
        4
    p2pCoder  
       2017-11-08 11:06:27 +08:00
    @praynise 你修改了类型 然后 sort_values(by='你的字段名'),不久可以了,上面的方法都是对 dataframe 整体进行排序
    princelai
        5
    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
        6
    seven2016  
       2017-11-08 11:15:51 +08:00   ❤️ 1
    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
        7
    praynise  
    OP
       2017-11-08 12:18:56 +08:00
    我傻了…我的错,谢谢楼上各位了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.