如何根据一周中不同日期的不同时段修剪数据集?

时间:2019-05-19 21:48:55

标签: python python-3.x pandas

我有2014年4月至9月的CSV文件。每个文件都包含以下4列(例如,我包括两行作为示例):

Date/Time          Lat      Lon       Base

4/1/2014 21:00:03, 40.7531, -74.0039, B02512
4/1/2014 21:00:05, 40.7791, -73.9623, B02512

每个文件都有超过500,000行,因此我想修剪数据集。

为了进行修剪,我决定只使用落在时隙中的那些行,如下所示:

Weekdays - 6:00 to 21:00
Friday - 21:00 to 23:59
Saturday - 21:00 to 23:59 and 00:00 to 02:59
Sunday - 00:00 to 02:59

我可以使用Pandas来获取每一行的星期几,但是我无法考虑进一步的方法。我相信使用if是非常基本和缓慢的。

我的代码用于检索文件中四月份的每一行的星期几,如下所示:

import numpy as np 
import pandas as pd 

df = pd.read_csv("../data/apr.csv", header='infer', delimiter=',')
for i in range(len(df['Date/Time'])):
    day = pd.to_datetime(df.iloc[i][0]).dayofweek
    print(day)

如果任何人都可以根据我提到的条件提出一种可以帮助我修剪数据集的方法/库/方法,我将不胜感激。

编辑:如果要查看实际的数据集,可以在这里找到它:Uber Trip Data 2014

1 个答案:

答案 0 :(得分:1)

我们可以执行以下操作:

  1. 首先将其Date/Time列转换为datetime类型
  2. 创建一个day列来指示日期。
  3. 然后创建您所说的条件
  4. 使用boolean indexing选择我们想要的行
df = pd.read_csv("../data/apr.csv", header='infer', delimiter=',')

# Convert to datetime
df['Date/Time'] = pd.to_datetime(df['Date/Time'])

# Create a day of the week column
df['Day'] = df['Date/Time'].dt.day

weekdays = [0,1,2,3]

# Define conditions
m1 = (df['Day'].isin(weekdays)) & df['Date/Time'].dt.strftime('%H:%M:%S').between('06:00:00', '21:00:00')
m2 = df['Day'].eq(4) & df['Date/Time'].dt.strftime('%H:%M:%S').between('21:00:00', '23:59:00')
m3 = df['Day'].eq(5) & (df['Date/Time'].dt.strftime('%H:%M:%S').between('21:00:00', '23:59:00') | df['Date/Time'].dt.strftime('%H:%M:%S').between('00:00:00', '02:59:00'))
m4 = df['Day'].eq(6) & df['Date/Time'].dt.strftime('%H:%M:%S').between('00:00:00', '02:59:00')

df[m1|m2|m3|m4]