#python #python-3.x #pandas #dataframe
Вопрос:
Из-за университетского проекта, в котором я хочу работать и изучать python, я наткнулся на дополнение dtale, которое помогает мне анализировать данные о массовых партийных манифестах.
Короче говоря: я добавил некоторые фильтры (например, я хочу показывать строки только с редактированием >= 20140914. Когда я запускаю код, фильтры, похоже, не применяются — не могли бы вы, пожалуйста, помочь мне с этим?
import pandas as pd
df = pd.read_csv('https://manifestoproject.wzb.eu/down/data/2020b/datasets/MPDataset_MPDS2020b.csv')
d = dtale.show(df)
# DISCLAIMER: 'df' refers to the data you passed in when calling 'dtale.show'
import pandas as pd
if isinstance(df, (pd.DatetimeIndex, pd.MultiIndex)):
df = df.to_frame(index=False)
# remove any pre-existing indices for ease of use in the D-Tale code, but this is not required
df = df.reset_index().drop('index', axis=1, errors='ignore')
df.columns = [str(c) for c in df.columns] # update columns to strings in case they are numbers
df.loc[:, 'edate'] = pd.Series(pd.to_datetime(df['edate'], infer_datetime_format=True), name='edate', index=df['edate'].index)
d.open_browser()
Таким образом, в принципе, моя цель состоит в том, чтобы не всегда начинать фильтрацию по датам и т. Д., Но чтобы весь мой прогресс сохранялся и применялся при запуске кода.
Спасибо за вашу помощь!
Комментарии:
1. Добро пожаловать в Stack Overflow. Я полагаю, что добавление небольшого образца вашего фрейма данных поможет прояснить ваш вопрос.
Ответ №1:
Есть некоторые другие аргументы, которые вы можете привести, pd.read_csv()
которые, вероятно, помогут вам здесь:
parse_dates
: Приведите эти аргументы в виде списка столбцов, которые панды должны преобразовать в даты. Это может заменить вашу предпоследнюю строку.index_col
: Это позволяет вам явно задать индекс, что должно помочь вам избежать преобразования.to_frame()
Если это не поможет вам пройти весь путь, у меня есть две идеи:
- Вы можете поместить всю эту логику в свою собственную функцию, называемую чем-то подобным
clean_df
, и вызвать ее для недавно загруженных данных. - Вы можете сохранить очищенные данные в формате, отличном от a
.csv
. Один (из многих) вариантов заключается в том , что егоDataFrames
можно сохранитьpickle
в нечто, называемое a, что является одним из способов сохранения объектов python в памяти. ЗагрузкаDataFrames
из маринада возвращает их в значительной степени точно так, как вы их сохранили, нет необходимости выполнять всю очистку.
Также небольшое примечание, я не думаю, что вам нужно import pandas
повторять дважды.
Комментарии:
1. Изменил значение pd.read на ‘df = pd.read_csv(‘ manifestoproject.wzb.eu/down/data/2020b/datasets/… ‘, parse_dates=[‘дата’], index_col=’редактировать’)’, спасибо за это!! —> Однако это на самом деле не решает мою проблему с фильтрацией для «правок» в период с 14/09/2014 по 30/08/2020. Я попробовал ‘df = [(df[‘edate’] >= ’14/09/2014′) amp; (df[‘edate’] >
2. **правка: допустил ошибку,
df.loc['14/09/2014':'30/08/2020']
действительно показывает все соответствующие результаты, но только в записной книжке Jupyter, поэтому, когда я открываю браузер с csv-файлом, фильтр не применяется. Спасибо за вашу помощь @zach