#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’