在导出pandas为csv之前按日期从小到大排序

2 投票
1 回答
51 浏览
提问于 2025-04-12 01:10

在网上查找和研究后,我发现有很多方法可以做到这一点,但不确定这些方法是否适合我想要的效果。就我个人而言,我还是希望我的日期格式是“3/30/24”。我正在从一些包含大量数据的地方提取数据,一切都按预期工作,但当我尝试对日期进行排序时,它只是按字典顺序排序。这种情况只发生在我从csv文件读取数据时,而不是写入,因为我只是想测试一下在写入后是否能进行排序。

data_to_export = {
   "Company Name": ["Mcdonalds","Burgerking"],
    "Delivery Address":["123 lake rd", "124 west rd"],
     "Date": ["3/30/24", "1/23/24"],
     "Customer Name": ["Zack", "Peter"],}
    df = pd.DataFrame(data_to_export)
    df.to_csv(join_move_to, index=False)

上面是一些示例数据,方便你快速了解,下面是我保存数据的方式。

在这之前我确实尝试过一些排序方法,但都没有成功,所以我把它们删掉了。在写入之前,我该如何让程序知道我想按日期排序,并且我仍然希望保持“(月/日/年)”的格式呢?

我明白这实际上是一个字符串,所以必须将其转换为某种日期格式,然后再进行排序,但我找不到这样做的方法。

这是我尝试过的代码,供大家参考。

    df = pd.DataFrame(data_to_export)
    df["Date"] = pd.to_datetime(df["Date"],format="%m/%d/%y")
    df.sort_values(by="Date", inplace=True)
    df.to_csv(path, index=False)

1 个回答

1

你应该在使用 to_datetime 的时候,传入一个自定义的 key,然后再用这个自定义的 key 去调用 sort_values。这样做可以按照你定义的规则来排序,同时不会改变原始数据:

(df.sort_values(by='Date', key=lambda x: pd.to_datetime(x, format='%m/%d/%y')
   .to_csv(path, index=False)  
)

输出的csv文件:

Company Name,Delivery Address,Date,Customer Name
Burgerking,124 west rd,1/23/24,Peter
Mcdonalds,123 lake rd,3/30/24,Zack

撰写回答