[英]Sort by (unstructured) dates in Pandas DataFrame
我有一個包含以下數據的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來添加小時組件:
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
於你的字符串apply
dateparser.parse
但這只會給你的日期,因為它不明白浮點值,所以后來我rsplit
串拿到小時和投浮動,然后構建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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.