Python 如何按英文日期格式而不是美国熊猫进行排序

Python 如何按英文日期格式而不是美国熊猫进行排序,python,sorting,date,pandas,datetime,Python,Sorting,Date,Pandas,Datetime,下面是(df.sort('date'))的输出示例 如您所见,它使用天数表示月份,反之亦然。你知道怎么解决这个问题吗 您可以使用并使用format参数,然后对其进行排序 symb dates 4 BLK 01/03/2014 09:00:00 0 BBR 02/06/2014 09:00:00 21 HZ 02/06/2014 09:00:00 24 OMNI 02/07/2014 09:00:00 31 NOTE

下面是(
df.sort('date')
)的输出示例

如您所见,它使用天数表示月份,反之亦然。你知道怎么解决这个问题吗

您可以使用并使用format参数,然后对其进行排序

    symb                dates
4     BLK  01/03/2014 09:00:00
0     BBR  02/06/2014 09:00:00
21     HZ  02/06/2014 09:00:00
24   OMNI  02/07/2014 09:00:00
31   NOTE  03/04/2014 09:00:00
65    AMP  03/04/2016 09:00:00
40    RBY  04/07/2014 09:00:00

我不确定您是如何获取数据的,但如果您是从CSV等源导入数据,则可以使用pandas.read\u CSV并设置
parse\u dates=True
。问题是日期列的类型是什么?您可以使用`dateutil.parse.parse轻松地将它们更改为类似日期的对象。比如说,

>> df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y %H:%M:%S')
>> df.sort('date')

               date    symb
0 2014-01-03 09:00:00   BLK
1 2014-02-06 09:00:00   BBR
2 2014-02-06 09:00:00    HZ
3 2014-02-07 09:00:00  OMNI
4 2014-03-04 09:00:00  NOTE
6 2014-04-07 09:00:00   RBY
5 2016-03-04 09:00:00   AMP
这将获得[ISO8601格式],该格式可能比
dd/mm/yyyy
格式更可取,但如果必须使用该格式,则可以使用@umutto

推荐的代码进行排序:


另一种解决方案是使用参数
parse_dates
in,如果格式
dd/mm/YYYY
add
dayfirst=True

#format dd/mm/YYYY
df['dates'] = pd.to_datetime(df['dates'], dayfirst=True)
print (df.sort_values('dates'))
    symb               dates
4    BLK 2014-03-01 09:00:00
31  NOTE 2014-04-03 09:00:00
0    BBR 2014-06-02 09:00:00
21    HZ 2014-06-02 09:00:00
24  OMNI 2014-07-02 09:00:00
40   RBY 2014-07-04 09:00:00
65   AMP 2016-04-03 09:00:00


请注意,
.sort()
方法已被弃用,请使用
.sort\u values()
instead@MaxU很好,看到了警告,但没有引起混淆,因为OP使用.sort()。在读取时正确读取
pandas Read_csv
中的dd/mm/yyyy日期格式。使用选项
parse_dates
,您将需要
dayfirst=True
。与大多数使用
read\u csv
的问题一样,解决方法是使用正确的选项在第一次正确使用
read\u csv
,而不是在之后进行修复。
#format mm/dd/YYYY
df['dates'] = pd.to_datetime(df['dates'])
print (df.sort_values('dates'))
    symb               dates
4    BLK 2014-01-03 09:00:00
0    BBR 2014-02-06 09:00:00
21    HZ 2014-02-06 09:00:00
24  OMNI 2014-02-07 09:00:00
31  NOTE 2014-03-04 09:00:00
40   RBY 2014-04-07 09:00:00
65   AMP 2016-03-04 09:00:00
#format dd/mm/YYYY
df['dates'] = pd.to_datetime(df['dates'], dayfirst=True)
print (df.sort_values('dates'))
    symb               dates
4    BLK 2014-03-01 09:00:00
31  NOTE 2014-04-03 09:00:00
0    BBR 2014-06-02 09:00:00
21    HZ 2014-06-02 09:00:00
24  OMNI 2014-07-02 09:00:00
40   RBY 2014-07-04 09:00:00
65   AMP 2016-04-03 09:00:00
import pandas as pd
import numpy as np
from pandas.compat import StringIO

temp=u"""symb,dates
BLK,01/03/2014 09:00:00
BBR,02/06/2014 09:00:00
HZ,02/06/2014 09:00:00
OMNI,02/07/2014 09:00:00
NOTE,03/04/2014 09:00:00
AMP,03/04/2016 09:00:00
RBY,04/07/2014 09:00:00"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), parse_dates=['dates'])

print (df)
   symb               dates
0   BLK 2014-01-03 09:00:00
1   BBR 2014-02-06 09:00:00
2    HZ 2014-02-06 09:00:00
3  OMNI 2014-02-07 09:00:00
4  NOTE 2014-03-04 09:00:00
5   AMP 2016-03-04 09:00:00
6   RBY 2014-04-07 09:00:00

print (df.dtypes)
symb             object
dates    datetime64[ns]
dtype: object
print (df.sort_values('dates'))
   symb               dates
0   BLK 2014-01-03 09:00:00
1   BBR 2014-02-06 09:00:00
2    HZ 2014-02-06 09:00:00
3  OMNI 2014-02-07 09:00:00
4  NOTE 2014-03-04 09:00:00
6   RBY 2014-04-07 09:00:00
5   AMP 2016-03-04 09:00:00
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), parse_dates=['dates'], dayfirst=True)

print (df)
   symb               dates
0   BLK 2014-03-01 09:00:00
1   BBR 2014-06-02 09:00:00
2    HZ 2014-06-02 09:00:00
3  OMNI 2014-07-02 09:00:00
4  NOTE 2014-04-03 09:00:00
5   AMP 2016-04-03 09:00:00
6   RBY 2014-07-04 09:00:00

print (df.dtypes)
symb             object
dates    datetime64[ns]
dtype: object

print (df.sort_values('dates'))
   symb               dates
0   BLK 2014-03-01 09:00:00
4  NOTE 2014-04-03 09:00:00
1   BBR 2014-06-02 09:00:00
2    HZ 2014-06-02 09:00:00
3  OMNI 2014-07-02 09:00:00
6   RBY 2014-07-04 09:00:00
5   AMP 2016-04-03 09:00:00