按列(字符串)排序CSV

2024-09-28 22:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我排序一个csv wrt一列,但现在这个字符串是越来越复杂,我不知道如何排序这个

为什么我仍然坚持熊猫就像我已经写回排序值回csv

CSV
Snapshot,Status
21.001.1154_2019-01-04_14-37-47_1280868,Released
21.001.1183_2019-01-04_16-37-47_1280868,Unit Tested
21.001.1183_2019-01-04_14-37-47_1280868,Release

I used:
dd.sort_values(['Snapshot'],ascending=True)
du.to_csv(unit_file,header =True,index=False)

dataframe:
C:\Users\320047585\Sathish\Python>python sample.py
Before Sort
                              Snapshot       Status
0  21.001.1154_2019-01-04_14-37-47_1280868     Released
1  21.001.1183_2019-01-04_16-37-47_1280868  Unit Tested
2  21.001.1183_2019-01-04_14-37-47_1280868      Release

它返回排序的值,在第一个之前,但现在如果两个ID都相同,我需要检查日期,甚至日期相同,我需要按时排序,任何细节都会有很大帮助

Expected output
21.001.1154_2019-01-04_14-37-47_1280868,Released
21.001.1183_2019-01-04_14-37-47_1280868,Released
21.001.1183_2019-01-04_16-37-47_1280868,Unit Tested

提前谢谢


Tags: csv字符串truerelease排序statussnapshotunit
2条回答

因为整个字符串都要排序,所以我给anky的答案加了一个小改动

Before
df_new = df.join(df.Snapshot.str.split("_",expand=True).drop(0,1)).sort_values(by=[1,2])

After
data_new = data.join(data.Snapshot.str.split("_",expand=True)).sort_values(by=[0,1,2])

它考虑了整个字符串

更有趣的是

data.sort_values(['Snapshot'],ascending=True) 
Also doing the perfect sorting..! it ignores underscores and dots  

使用^{}获取^{}后面的要排序的值:

df_new=df.reindex(df.Snapshot.str.split("_").str[2].sort_values().index)
print(df_new)

                                  Snapshot       Status
0  21.001.1154_2019-01-04_14-37-47_1280868     Released
2  21.001.1183_2019-01-04_14-37-47_1280868     Released
1  21.001.1183_2019-01-04_16-37-47_1280868  Unit Tested

如果您需要同时考虑日期和时间,请使用:

data_new = data.join(data.Snapshot.str.split("_",expand=True)).sort_values(by=[0,1,2])
print(data_new)

                                 Snapshot       Status           1         2  \
0  21.001.1154_2019-01-04_14-37-47_1280868     Released  2019-01-04  14-37-47   
2  21.001.1183_2019-01-04_14-37-47_1280868     Released  2019-01-04  14-37-47   
1  21.001.1183_2019-01-04_16-37-47_1280868  Unit Tested  2019-01-04  16-37-47   

         3  
0  1280868  
2  1280868  
1  1280868  

当然,您可以删除不需要的列。你知道吗

相关问题 更多 >