使用pandas在阅读时对csv-data进行排序

时间:2015-01-27 15:54:22

标签: python sorting csv pandas

我有一个csv文件,其中的条目如下:

1,2014 1 1 0 1,5
2,2014 1 1 0 1,5
3,2014 1 1 0 1,5
4,2014 1 1 0 1,6
5,2014 1 1 0 1,6
6,2014 1 1 0 1,12
7,2014 1 1 0 1,17
8,2014 5 7 1 5,4

第一列是ID,第二列是到达日期(最后一个条目的例子:可能是07,凌晨1点05分),最后一列是工作持续时间(以分钟为单位)。

实际上,我使用pandas和以下函数读取数据:

import pandas as pd

def convert_data(csv_path):
    store = pd.HDFStore(data_file)
    print('Loading CSV File')
    df = pd.read_csv(csv_path, parse_dates=True)
    print('CSV File Loaded, Converting Dates/Times')
    df['Arrival_time'] = map(convert_time, df['Arrival_time'])
    df['Rel_time'] = (df['Arrival_time'] - REF.timestamp)/60.0
    print('Conversion Complete')
    store['orders'] = df

我的问题是:如何根据持续时间对条目进行排序,但考虑到达日期?所以,我想根据“到达日期+持续时间”对csv条目进行排序。这怎么可能?

感谢任何提示!最诚挚的问候,斯坦。

1 个答案:

答案 0 :(得分:0)

好的,以下显示您可以转换日期时间,然后显示如何添加分钟:

In [79]:

df['Arrival_Date'] = pd.to_datetime(df['Arrival_Date'], format='%Y %m %d %H %M')
df
Out[79]:
   ID        Arrival_Date  Duration
0   1 2014-01-01 00:01:00         5
1   2 2014-01-01 00:01:00         5
2   3 2014-01-01 00:01:00         5
3   4 2014-01-01 00:01:00         6
4   5 2014-01-01 00:01:00         6
5   6 2014-01-01 00:01:00        12
6   7 2014-01-01 00:01:00        17
7   8 2014-05-07 01:05:00         4

In [80]:

import datetime as dt
df['Arrival_and_Duration'] = df['Arrival_Date'] + df['Duration'].apply(lambda x: dt.timedelta(minutes=int(x)))
df
Out[80]:
   ID        Arrival_Date  Duration Arrival_and_Duration
0   1 2014-01-01 00:01:00         5  2014-01-01 00:06:00
1   2 2014-01-01 00:01:00         5  2014-01-01 00:06:00
2   3 2014-01-01 00:01:00         5  2014-01-01 00:06:00
3   4 2014-01-01 00:01:00         6  2014-01-01 00:07:00
4   5 2014-01-01 00:01:00         6  2014-01-01 00:07:00
5   6 2014-01-01 00:01:00        12  2014-01-01 00:13:00
6   7 2014-01-01 00:01:00        17  2014-01-01 00:18:00
7   8 2014-05-07 01:05:00         4  2014-05-07 01:09:00

In [81]:

df.sort(columns=['Arrival_and_Duration'])
Out[81]:
   ID        Arrival_Date  Duration Arrival_and_Duration
0   1 2014-01-01 00:01:00         5  2014-01-01 00:06:00
1   2 2014-01-01 00:01:00         5  2014-01-01 00:06:00
2   3 2014-01-01 00:01:00         5  2014-01-01 00:06:00
3   4 2014-01-01 00:01:00         6  2014-01-01 00:07:00
4   5 2014-01-01 00:01:00         6  2014-01-01 00:07:00
5   6 2014-01-01 00:01:00        12  2014-01-01 00:13:00
6   7 2014-01-01 00:01:00        17  2014-01-01 00:18:00
7   8 2014-05-07 01:05:00         4  2014-05-07 01:09:00