Python для начинающих — кодирование с помощью dtale (проблема с порядком команд)

#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()

Если это не поможет вам пройти весь путь, у меня есть две идеи:

  1. Вы можете поместить всю эту логику в свою собственную функцию, называемую чем-то подобным clean_df , и вызвать ее для недавно загруженных данных.
  2. Вы можете сохранить очищенные данные в формате, отличном от 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