我有一个示例csv表,看起来像这样
Start Time End Time Trip Duration Start Station End Station
01/01/17 15:09 01/01/17 15:14 321 A B
01/02/17 15:09 01/02/17 15:14 321 C D
12/03/17 15:09 12/03/17 15:14 321 E F
05/01/17 15:09 05/01/17 15:14 321 B D
17/02/17 15:09 17/02/17 15:14 321 C F
12/04/17 15:09 12/04/17 15:14 321 E H
13/05/17 15:09 13/05/17 15:14 321 S K
17/01/17 15:09 17/01/17 15:14 321 A D
我能够使用以下代码读取上述文件并获取月和日的值
df = pd.read_csv(sample.csv)
df['month'] = df['Start Time'].dt.month
df['day_of_week'] = df['Start Time'].dt.weekday_name
但是我有一个要求用户输入月或日的要求,然后根据用户输入的值创建一个新数据,然后将执行进一步的操作。
例如:如果用户输入 January (每年1月),那么在开始时间中该月是1月的任何地方,都会显示与之相关的数据。新数据应该是这样的
Start Time End Time Trip Duration Start Station End Station
01/01/17 15:09 01/01/17 15:14 321 A B
05/01/17 15:09 05/01/17 15:14 321 B D
17/01/17 15:09 17/01/17 15:14 321 A D
如果用户输入了一天,例如 Monday (假设星期一为12),则o / p应该是这样的>
然后在这些新表上需要进行进一步的操作/计算。 任何人都可以告诉我们如何创建新的过滤数据 Start Time End Time Trip Duration Start Station End Station
12/03/17 15:09 12/03/17 15:14 321 E F
12/04/17 15:09 12/04/17 15:14 321 E H
答案 0 :(得分:0)
一种方法是使用calendar
模块获取星期几,月份和日期的列表,然后使用简单的if else
语法通过用户输入过滤数据框:
import calendar
# Start by converting start time to proper datetime format:
df['Start Time'] = pd.to_datetime(df['Start Time'])
months = list(calendar.month_name)
days = list(calendar.day_name)
user_in = input('What do you want to filter by? ')
if user_in in months:
filtered = df[df['Start Time'].dt.strftime('%B').eq(user_in)]
elif user_in in days:
filtered = df[df['Start Time'].dt.strftime('%A').eq(user_in)]
else:
print('Invalid Input')
假设user_in
是一月,则filtered
数据帧看起来像:
>>> filtered
Start Time End Time Trip Duration Start Station End Station
0 2017-01-01 15:09:00 01/01/17 15:14 321 A B
1 2017-01-02 15:09:00 01/02/17 15:14 321 C D
7 2017-01-17 15:09:00 17/01/17 15:14 321 A D
如果user_in
是星期一:
>>> filtered
Start Time End Time Trip Duration Start Station End Station
1 2017-01-02 15:09:00 01/02/17 15:14 321 C D
3 2017-05-01 15:09:00 05/01/17 15:14 321 B D
5 2017-12-04 15:09:00 12/04/17 15:14 321 E H