在导出pandas为csv之前按日期从小到大排序
在网上查找和研究后,我发现有很多方法可以做到这一点,但不确定这些方法是否适合我想要的效果。就我个人而言,我还是希望我的日期格式是“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