【问题标题】:Pandas Dataframe Sort Date熊猫数据框排序日期
【发布时间】:2021-10-21 22:58:19
【问题描述】:

我在http://sprunge.us/Pv338j 有一个 csv 文件。我用它创建了一个数据框。其中有一个日期列。如果我尝试对此日期列进行排序,则该列未排序。这是我的代码:

import pandas as pd

df = pd.read_csv(outputcsv)
df['Date'] = pd.to_datetime(df.Date)

df.Date

0     2020-11-11
1     2020-12-11
2     2020-11-13
3     2020-11-14
4     2020-11-15
   
274   2021-12-08
275   2021-08-13
276   2021-08-14
277   2021-08-15
278   2021-08-16
Name: Date, Length: 279, dtype: datetime64[ns]

df.sort_values(by='Date', inplace=True)

df.Date
20    2020-01-12
21    2020-02-12
22    2020-03-12
23    2020-04-12
24    2020-05-12
   
152   2021-12-04
182   2021-12-05
213   2021-12-06
243   2021-12-07
274   2021-12-08
Name: Date, Length: 279, dtype: datetime64[ns]

【问题讨论】:

  • 日期时间有混合格式,soemtiems 将月与日交换。所以问题不在于排序,而在于如何将这些数据解析为日期时间。
  • 它看起来按升序排序,这是默认形式。如果您希望它按降序排列,只需使用ascending=False
  • @jezrael 我必须手动更改它们吗?我需要 %Y-%m-%d 格式的日期。
  • 转换并不容易,因为有时2021-02-06 表示二月,有时是六月。最正确的是手动。
  • @rambalachandran 我需要它们按升序排列。查看排序后的第一个日期。它变了。第一个日期是 2020-11-11。上次约会也发生了同样的事情。

标签: python-3.x pandas dataframe sorting datetime


【解决方案1】:

你可以试试这个:

df['Date2'] = [(d - datetime.datetime(1970,1,1)).total_seconds() for d in df['Date']]
                            
df['year'] = [datetime.datetime.fromtimestamp(d).year for d in df['Date2']]
df['month'] = [datetime.datetime.fromtimestamp(d).month for d in df['Date2']]
df['day'] = [datetime.datetime.fromtimestamp(d).day for d in df['Date2']]


df.sort_values(['year', 'month', 'day'], ascending=[True, True, True])

df['Date']

【讨论】:

  • 相同的输出。从 2020-01-12 开始,而应该是 2020-11-11。
  • @Joydeep,试试新的代码块,这是你的答案吗?
  • 看起来不错。谢谢。虽然,日期仍然没有排序。如果有更好的结果,我会稍等。
猜你喜欢
  • 2017-05-16
  • 2018-07-05
  • 1970-01-01
  • 2022-10-17
  • 2020-01-14
  • 1970-01-01
  • 2021-04-04
  • 2021-12-18
  • 2019-04-10
相关资源
最近更新 更多