Когда я сортирую дату, некоторые из отсортированных данных случайным образом неверны с использованием панд. В чем может быть причина?

#python #pandas #date

Вопрос:

Я получил информацию из Твиттера и хотел бы отсортировать даты. Однако некоторые даты неправильно отсортированы, переключаясь с даты на месяц и наоборот.Что-то не так с кодом или исходными данными? Однако мои исходные данные выглядели нормально. Кто-нибудь может помочь?

Необработанные данные

введите описание изображения здесь

мой код

 df05 = pd.read_csv("01_clean_2020-07.csv")
df05['date'] = pd.to_datetime(df05['date'], dayfirst=True)
df05_count = df05['date'].dt.date.value_counts().sort_index().reset_index()
df05_count.columns = ['date','count']
 

выход

 date    count
0   2020-03-07  2 **wrong
1   2020-04-07  1 **wrong
2   2020-07-13  5
3   2020-07-15  1
4   2020-07-16  1
5   2020-07-20  1
6   2020-07-21  7
7   2020-07-22  3
8   2020-07-23  3
9   2020-07-24  3
10  2020-07-25  2
11  2020-07-26  1
12  2020-07-28  1
13  2020-07-29  1
14  2020-07-30  1
15  2020-07-31  2
16  2020-09-07  1 *** wrong
17  2020-11-07  6 *** wrong
18  2020-12-07  3 *** wrong
 

Комментарии:

1. Как 7/16/2020 (ваша первая запись) может быть первым днем? Что такое 16-й месяц? Никогда о таком не слышал…

Ответ №1:

Здесь кажется, что день не первый, а месяц, так что уберите dayfirst=True :

 df05['date'] = pd.to_datetime(df05['date'])
 

Также можно указать формат:

 df05['date'] = pd.to_datetime(df05['date'], format='%m/%d/%Y %H:%M')
 

Комментарии:

1. Я все еще не знаком с пандами. Большое вам спасибо за ваш комментарий. Это работает.

2. @tassaneel — Да, проблема в том, работают ли входные данные

3. @tassaneel — кажется, существуют смешанные форматы MM/DD/YYYY и DD/MM/YYYY . Панды, работающие здесь, как — конвертируйте в месяцы, если это возможно ( MM/DD/YYYY ), если нет, поменяйте их местами ( DD/MM/YYYY )

4. @tassaneel — Это означает, что если 12/7/2020 — и использовать df05['date'] = pd.to_datetime(df05['date']) — то 12-это месяц. панды не могут думать так, как будто все остальные месяцы равны 7, поэтому замените один месяц днем.

5. @tassaneel — 12/7/2020 и если использовать df05['date'] = pd.to_datetime(df05['date'], dayfirst=True) , то 7 — это месяц, но проблема для всех других дат с первым номером l;например, 13 — 7/3/2020 — месяц равен 3, потому что 7 июля. Но если 7/13/2020 месяц не может быть 13, поэтому панды меняют его местами, и 7 июля.