python - 无法根据python中的用户输入过滤csv表中的数据

标签 python pandas dataframe

我有一个 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/

相关文章:

python - 如何通过 2x2 平均内核对 Pandas 数据帧进行下采样

python - 如何根据某些条件对单个可迭代对象进行 "round-robin"?

python-3.x - 使用 lambda 将字典映射到 pandas 系列

python - 从另一个数据框中的列值替换 Pandas 数据框中列中的值

python - python如何求以前每次销量的平均值

python - 使用 for 循环在数据框中添加值

python - 根据多个 IF 条件使用新 ID 创建列

python - 使局域网中的 django 服务器可以访问

python - 仅生产 : sometimes get 403 CSRF verification failed

python - 为文本挖掘创建词汇字典