Выбор DataFrame в пределах диапазонов дат возвращается без строк - PullRequest
0 голосов
/ 03 января 2019

Я следую общепринятому процессу SO для объединения DataFrame только в выборку, которую планирую использовать для анализа, но где-то в процессе использования pd.date_range и выбора между датами данные отправляются отсутствуют заголовки столбцов как единственные данные, которые существуют.

Вот мои переменные:

custom_date_start = '2018-01-01'

custom_date_end= '2018-10-31'

sheet_date = 'date'

df_clean # raw data table

Таблица кратко описана:

display(df_clean.head(3))
display(df_clean.tail(3))

# output

date    b_clicks    b_leads b_sals
2   1/1/2018    72  6   5
3   1/2/2018    232 9   7
4   1/3/2018    255 23  17
date    b_clicks    b_leads b_sals
729 12/29/2019          
730 12/30/2019          
731 12/31/2019      

Выбор образца:

date_range = pd.date_range(custom_date_start, custom_date_end)

print(date_range)

display(df_clean.head(1))
display(df_clean.tail(1))

df_clean_test = df_clean[(df_clean[sheet_date] > custom_date_start) & (df_clean[sheet_date] <= custom_date_end)]

display(df_clean_test.head(1))
display(df_clean_test.tail(1))

# output

DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
               '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
               '2018-01-09', '2018-01-10',
               ...
               '2018-10-22', '2018-10-23', '2018-10-24', '2018-10-25',
               '2018-10-26', '2018-10-27', '2018-10-28', '2018-10-29',
               '2018-10-30', '2018-10-31'],
              dtype='datetime64[ns]', length=304, freq='D')
date    b_clicks    b_leads b_sals # df_clean
2   1/1/2018    72  6   5
date    b_clicks    b_leads b_sals # df_clean
731 12/31/2019          
date    b_clicks    b_leads b_sals # df_clean_test
date    b_clicks    b_leads b_sals # df_clean_test

1 Ответ

0 голосов
/ 03 января 2019

Ваша логика верна, но проблема в сравнении.

Рассмотрим этот пример,

df1 = pd.DataFrame({'Date': {0: '26/1/2016 ', 1: '27/1/2016 '}})
df1

Вывод:

      Date
0   26/1/2016
1   27/1/2016

Другие данные,

date_range = pd.date_range('2016-01-26', '2016-01-27')
df2 = pd.DataFrame({'Date': date_range})
df2

Вывод:

    Date
0   2016-01-26
1   2016-01-27

Давайте сравним даты в другом формате,

print(df2['Date'] == df1['Date'])

Вывод:

0    False
1    False
Name: Date, dtype: bool

Теперь исправьтеформат Date из df1,

df1['Date'] = pd.to_datetime(df1['Date'])
df1

Вывод:

       Date
0   2016-01-26
1   2016-01-27

Давайте снова сравним даты двух кадров данных,

print(df1['Date'] == df2['Date'])

Вывод:

0    True
1    True
Name: Date, dtype: bool

В вашем примере date в df_clean имеет неправильный формат, поэтому при сравнении все значения имеют значение false и строки не возвращаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...