Фрейм данных Pandas: хранить только строки в зависимости от фактической даты и максимум 7 дней

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных со статьями, вот первые статьи:

 0   La reprise de l’économie française s’étiole et...   Sur le Vieux-Port, à Marseille, le 28 septembr...   2020-10-06
1   Aux Etats-Unis, un rapport parlementaire veut ...   Les icones des services de Google, Amazon, Fac...   2020-10-07
2   Les beaux jours de la médiation en entreprise   Carnet de bureau. Des entreprises appellent de...   2020-10-07
3   Plan de relance : comment « déterminer mainten...   Tribune. Parmi les multiples critiques entendu...   2020-10-07
4   Des lauréats du Nobel qui ne le méritaient pas  Chaque automne, depuis plus d’un siècle, le pe...   2015-10-07
  

Я хотел бы хранить только статьи, у которых есть максимум 7 дней с фактической даты.
Что-то вроде этого: фактическая дата <= статьи <= максимум 7 дней

Я закодировал это для очистки статей:

  %%time

lemonde_title = []
lemonde_content = []
published_date =[]

from newspaper import Article
from newspaper import ArticleException
from datetime import datetime

for art_link in all_urls:
    try:
        art = Article(art_link)
        art.download()
        art.parse()
        
        lemonde_title.append(art.title)
        lemonde_content.append(art.text)
        
        try:
            publish_date = datetime.strptime(str(art.publish_date), '%Y-%m-%d %H:%M:%S').strftime('%Y-%M-%D')
            published_date.append(publish_date)
        except:
            published_date.append('unconverted')
        
    except ArticleException:
        pass
  

Я преобразовал столбец даты следующим образом:

 # converting the string to datetime format 
df['date'] = pd.to_datetime(df['date'], format='%Y-%M-%D') 
  

И когда я пытаюсь выполнить следующий код, я получаю сообщение об ошибке TypeError: Invalid comparison between dtype=datetime64[ns] and date :

 import datetime
date_before = datetime.date.today() - datetime.timedelta(days=7)
df = df[df['date'] >date_before]
  

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

1. Пожалуйста, поделитесь образцом ввода фрейма данных с ожидаемым результатом для ясности.

2. Здравствуйте, я отредактировал свой пост с изображением. Теперь вы можете увидеть фрейм данных, который у меня есть

3. Наличие изображений нехорошо. Вставьте свой df в виде кода и каков ожидаемый результат?

Ответ №1:

 df = pd.DataFrame({
    'text': ["t1", "t2", "t3"],
    'date' : ['2020-10-06', '2020-10-05', '2012-10-06']
})
df['date'] = pd.to_datetime(df['date'])

till = pd.to_datetime(datetime.date.today() - datetime.timedelta(days=7))
df = df[df['date'] >= till]
  

Вывод:

     text    date
0   t1  2020-10-06
1   t2  2020-10-05
  

Ответ №2:

используйте это это работает

     import datetime
    date_before = datetime.date.today() - datetime.timedelta(days=7) 
    df = df[df['date'] >date_before]
  

предыдущая дата может быть отредактирована вами так, как вы хотите.

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

1. Я попробовал, у меня TypeError: ‘>’ не поддерживается между экземплярами ‘str’ и ‘datetime.date’

2. для этого вам нужно убедиться, что атрибут data является объектом datetime, а не string

3. Спасибо, например type(df['date'][0]) , дает тип str. Итак, я должен преобразовать этот столбец в datetime?

4. да, тогда оба столбца будут находиться в объекте datatime, чтобы вы могли сравнить оба.

5. Я преобразовал столбец, и теперь у меня есть Invalid comparison between dtype=datetime64[ns] and date

Ответ №3:

импортируйте datetime как dt df[(dt.datetime.today()-df.date).apply(лямбда x: 0<= x.days <7) ]

Это должно сработать!

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

1. Спасибо, я попробовал это, и у меня есть ошибка AttributeError: модуль ‘datetime’ не имеет атрибута ‘today’