我有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
答案 0 :(得分:1)
我们可以执行以下操作:
Date/Time
列转换为datetime
类型day
列来指示日期。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]