簡體   English   中英

在Pandas DataFrame中按(非結構化)日期排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM