Не удается отфильтровать данные из таблицы CSV в соответствии с пользовательским вводом в Python - PullRequest
0 голосов
/ 26 октября 2018

У меня есть образец листа 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

Затем для этих новых таблиц необходимо выполнить дальнейшие действия / вычисления.

Может кто-нибудь сказать, как эти новые отфильтрованные данные могутбыть созданным

1 Ответ

0 голосов
/ 26 октября 2018

Один из способов - использовать модуль 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...