2016-09-12 123 views
1

(非结构化)的日期我有以下数据排序由熊猫数据框

请注意,我有一个单一的列,其中日期,月份和时间按以下格式给出一个Excel表格。

我希望根据日期和时间(即Jan-1-1.0,Jan-2-2.0,Jan-1-3.0)对行进行排序,并寻找Python Pandas DataFrame中的方法。 (日期为法文)

请提供您的建议。

Date-heure 

Vendredi 03 novembre 10.0 
Vendredi 03 novembre 5.0 
Vendredi 03 novembre 18.0 
Vendredi 03 novembre 24.0 
Samedi 04 novembre 1.0 
Samedi 04 novembre 2.0 
Samedi 04 novembre 4.0 
Samedi 04 novembre 5.0 
Samedi 04 novembre 7.0 
Samedi 04 novembre 13.0 
Samedi 04 novembre 21.0 
Vendredi 20 avril 1.0 
Dimanche 05 novembre 2.0 
Dimanche 05 novembre 8.0 

感谢您的及时回复。在我的Excel中,单元格是Date。当我作为一个DataFrame加载,它显示我的数据类型为

pandas.core.series.Series 

而我只是无法整理出来。另请注意,我在同一个单元中也有一段时间。

向您展示如下所有的dtypes;

Date_heure              object 
Heure               int64 
Industrie (MW)             int64 
Tertiaire Chauffage (MW)           int64 
Tertiaire Climatisation (MW)          int64 
Tertiaire Autres usages (MW)          int64 
Résidentiel Chauffage (MW)          int64 
Résidentiel Eau chaude (MW)          int64 
dtype: object 

谢谢。

可以使用 dateparser解析你的字符串,然后构建一个TimedeltaIndex
+0

你能告诉你,当加载到DF这会发生什么? 'dtype'应该使用'pd.read_excel'正确地嗅探到'datetime'中,所以它应该是可排序的,除非这些是真正的字符串 – EdChum

+0

感谢您的及时响应。在我的Excel中,单元格是Date。当我作为DataFrame加载时,它显示我的数据类型为pandas.core.series.Series – Mari

+0

用新信息编辑你的问题'df.dtypes'显示什么? – EdChum

回答

0

确定添加的小时部分:

In [36]: 
import dateparser 
t="""Date-heure 
Vendredi 03 novembre 10.0 
Vendredi 03 novembre 5.0 
Vendredi 03 novembre 18.0 
Vendredi 03 novembre 24.0 
Samedi 04 novembre 1.0 
Samedi 04 novembre 2.0 
Samedi 04 novembre 4.0 
Samedi 04 novembre 5.0 
Samedi 04 novembre 7.0 
Samedi 04 novembre 13.0 
Samedi 04 novembre 21.0 
Vendredi 20 avril 1.0 
Dimanche 05 novembre 2.0 
Dimanche 05 novembre 8.0""" 
df = pd.read_csv(io.StringIO(t)) 
df['date-time'] = df['Date-heure'].str.split().str[:-1].str.join(' ').apply(dateparser.parse) + pd.TimedeltaIndex((df['Date-heure'].str.rsplit().str[-1]).astype(float), unit='H') 
df 

Out[36]: 
        Date-heure   date-time 
0 Vendredi 03 novembre 10.0 2016-11-03 10:00:00 
1 Vendredi 03 novembre 5.0 2016-11-03 05:00:00 
2 Vendredi 03 novembre 18.0 2016-11-03 18:00:00 
3 Vendredi 03 novembre 24.0 2016-11-04 00:00:00 
4  Samedi 04 novembre 1.0 2016-11-04 01:00:00 
5  Samedi 04 novembre 2.0 2016-11-04 02:00:00 
6  Samedi 04 novembre 4.0 2016-11-04 04:00:00 
7  Samedi 04 novembre 5.0 2016-11-04 05:00:00 
8  Samedi 04 novembre 7.0 2016-11-04 07:00:00 
9  Samedi 04 novembre 13.0 2016-11-04 13:00:00 
10 Samedi 04 novembre 21.0 2016-11-04 21:00:00 
11  Vendredi 20 avril 1.0 2016-04-20 01:00:00 
12 Dimanche 05 novembre 2.0 2016-11-05 02:00:00 
13 Dimanche 05 novembre 8.0 2016-11-05 08:00:00 

所以这样的:

df['Date-heure'].str.split().str[:-1].str.join(' ').apply(dateparser.parse) + pd.TimedeltaIndex((df['Date-heure'].str.rsplit().str[-1]).astype(float), unit='H') 

是应该引起你行了,在这里我打电话apply你的字符串到applydateparser.parse但这只会给你日期,因为它不懂浮点值,所以我然后rsplit字符串得到小时和转换为f讨厌,然后构造一个timedeltaindex。

在这之后,我可以使用sort_values排序的DF:

In [37]: 
df.sort_values('date-time') 

Out[37]: 
        Date-heure   date-time 
11  Vendredi 20 avril 1.0 2016-04-20 01:00:00 
1 Vendredi 03 novembre 5.0 2016-11-03 05:00:00 
0 Vendredi 03 novembre 10.0 2016-11-03 10:00:00 
2 Vendredi 03 novembre 18.0 2016-11-03 18:00:00 
3 Vendredi 03 novembre 24.0 2016-11-04 00:00:00 
4  Samedi 04 novembre 1.0 2016-11-04 01:00:00 
5  Samedi 04 novembre 2.0 2016-11-04 02:00:00 
6  Samedi 04 novembre 4.0 2016-11-04 04:00:00 
7  Samedi 04 novembre 5.0 2016-11-04 05:00:00 
8  Samedi 04 novembre 7.0 2016-11-04 07:00:00 
9  Samedi 04 novembre 13.0 2016-11-04 13:00:00 
10 Samedi 04 novembre 21.0 2016-11-04 21:00:00 
12 Dimanche 05 novembre 2.0 2016-11-05 02:00:00 
13 Dimanche 05 novembre 8.0 2016-11-05 08:00:00 
+0

尊敬的EdChum,非常感谢您为努力帮助我所做的努力。现在我可以按照我的意愿对数据进行排序。再次感谢您的时间和努力。他们按时帮助我。 – Mari