我有一个pandas数据帧如下:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
Run Code Online (Sandbox Code Playgroud)
我想按它排序Date,但列只是一个object.
我试图使列成为日期对象,但我遇到了一个问题,即该格式不是所需的格式.所需格式2015-02-20,等
所以现在我想弄清楚如何将'美国'日期转换为ISO标准,以便我可以将它们作为日期对象,以便我可以按它们排序.
我如何将这些美国日期转换为ISO标准,还是我在熊猫中缺少一种更直接的方法?
JAB*_*JAB 90
您可以使用pd.to_datetime()转换为datetime对象.它需要一个格式参数,但在你的情况下,我认为你不需要它.
>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
Date Symbol
0 02/20/2015 A
1 01/15/2016 A
2 08/21/2015 A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
Run Code Online (Sandbox Code Playgroud)
对于将来的搜索,您可以更改排序语句:
>>> df.sort_values(by='Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
Run Code Online (Sandbox Code Playgroud)
Hap*_*lop 42
DataFrames sort已弃用该方法.现在是sort_values.使用后转换为datetime对象后df['Date']=pd.to_datetime(df['Date']),
df.sort_values(by=['Date'])
Run Code Online (Sandbox Code Playgroud)
注意:按原位排序和/或按降序排序(按时间顺序排列):
df.sort_values(by=['Date'], inplace=True, ascending=False)
Run Code Online (Sandbox Code Playgroud)
Lon*_*Rob 10
@ JAB的答案快速而简洁.但它改变了DataFrame你想要排序的东西,你可能想要也可能不想要.
(注意:你几乎肯定会想要它,因为你的日期列应该是日期,而不是字符串!)
万一您不希望将日期更改为日期,您也可以采用不同的方式.
首先,从排序Date列中获取索引:
In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')
Run Code Online (Sandbox Code Playgroud)
然后使用它来索引原始文件DataFrame,保持原样不变:
In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]:
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
Run Code Online (Sandbox Code Playgroud)
魔法!
注意:对于Pandas版本0.20.0及更高版本,请使用loc而不是ix,现在已弃用.
因为pandas >= 1.0.0我们有key争论DataFrame.sort_values。这样我们就可以通过指定键对数据帧进行排序,而无需调整原始数据帧:
df.sort_values(by="Date", key=pd.to_datetime)
Run Code Online (Sandbox Code Playgroud)
Symbol Date
0 A 02/20/2015
2 A 08/21/2015
1 A 01/15/2016
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152574 次 |
| 最近记录: |