【问题标题】:Sorting the date column on a pandas dataframe that is not in date time format and has format mmm dd, yyyy对不是日期时间格式且格式为 mmm dd, yyyy 的 pandas 数据帧上的日期列进行排序
【发布时间】:2020-11-20 08:14:54
【问题描述】:

大家好,我正在使用包含日期列的 pandas 数据框。我想按日期按升序对该列进行排序,这意味着最近的日期位于数据框的底部。我遇到的问题是日期列以以下格式显示日期: “2020 年 11 月 3 日”

我如何对这些日期进行排序,我在网上找到的建议是将日期转换为日期时间格式,然后排序然后将其更改回此格式。有没有更简单的方法来做到这一点?这个我试过了

new_df.sort_values(by=["Date"],ascending=True)

其中 new_df 是数据框,但这似乎不起作用。 关于如何做到这一点的任何想法?我本质上希望输出具有类似

Date
----
Oct 31, 2020
Nov 1, 2020
Nov 12,2020
.
.
.

【问题讨论】:

  • 您确定您的列日期是日期时间吗? new_df['Date']=pd.to_datetime(new_df['Date'])
  • @adhg no 正如我提到的,在标题和描述中,它不是日期时间
  • 所以最简单的方法是将其转换为日期时间。除非我不明白提出的问题。 (检查我在评论中提供的代码)
  • 是的,我看到最简单的排序方法是使用日期时间,现在问题更是如此,如果有一种方法可以直接排序而不转换为日期时间,因为我想保留现在排序后的格式,不是日期时间格式。

标签: python pandas dataframe


【解决方案1】:

我会先重新格式化日期列,然后转换为日期时间,然后排序:

dates = ['Nov 1, 2020','Nov 12,2020','Oct 31, 2020']
df = pd.DataFrame({'Date':dates, 'Col1':[2,3,1]})

#        Date      Col1
# 0 Nov 1, 2020     2
# 1 Nov 12,2020     3
# 2 Oct 31, 2020    1

df['Date'] = pd.to_datetime(df['Date'].apply(lambda x: "-".join(x.replace(',',' ').split())))

df = df.sort_values('Date')

#        Date     Col1
# 2 2020-10-31      1
# 0 2020-11-01      2
# 1 2020-11-12      3

# and if you want to get the dates back in their original format
df['Date'] = df['Date'].apply(lambda x: "{} {}, {}".format(x.month_name()[:3],x.day,x.year))


#        Date     Col1
# 2 Oct 31, 2020    1
# 0 Nov 1, 2020     2
# 1 Nov 12, 2020    3

【讨论】:

  • 这似乎是我的想法,但我担心的是我希望格式保持为例如“2020 年 11 月 1 日”,所以如果你提出了解决方案,我会排序后必须转换回这种格式,有没有办法做到这一点?
  • 刚刚更新了我的答案以转换回原始日期格式:)
【解决方案2】:
df.sort_values(by = "Date", key = pd.to_datetime)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2016-05-20
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多