在Pandas DataFrame中按(非结构化)日期排序

时间:2016-09-12 10:39:12

标签: python python-2.7 sorting 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

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,您可以使用dateparser来解析字符串,然后构造一个TimedeltaIndex来添加小时组件:

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,但这只会给您一个日期,因为它不了解浮动值,然后我sort_values字符串得到小时并转换为浮点数然后构造一个timedeltaindex。

之后我可以使用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 对df进行排序:

public class GenericRepository<T> where T : class
{
  private MyDatabase _Context;
  private DbSet<T> dbset;

  public GenericRepository(MyDatabase context)
  {
    _Context = context;
    dbSet = context.Set<T>();
  }

  public T Get(int id)
  {
    return dbSet.Find(id);
  }

  public IEnumerable<T> GetAll()
  {
    return dbSet<T>.ToList();
  }

  public IEnumerable<T> Where(Expression<Func<T>, bool>> predicate)
  {
    return dbSet.Where(predicate);
  }
  ...
  ...
}