我有一个 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
但我有一个要求,要求用户输入月份或日期,然后根据用户输入的这些值需要创建新数据,并在此基础上执行进一步的操作。
例如:如果用户输入一月,则开始时间中的月份为一月,将显示与之相关的数据。新数据应该是这样的
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
如果用户输入一天,例如星期一(假设星期一的日期是 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
然后需要在这些新表上完成进一步的操作/计算。
谁能告诉我如何创建这个新的过滤数据
最佳答案
一种方法是使用 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
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
关于python - 无法根据python中的用户输入过滤csv表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998887/