Удалить строки из нескольких фреймов данных, которые содержат неверные данные - PullRequest
0 голосов
/ 14 января 2019

Скажите, у меня есть n dataframes, df1, df2 ... dfn.

Поиск строк, содержащих «плохие» значения в строке в данном кадре данных, выполняется, например,

index1 = df1[df1.isin([np.nan, np.inf, -np.inf])]
index2 = df2[df2.isin([np.nan, np.inf, -np.inf])]

Теперь, drop добавление этих плохих строк в плохие dataframe выполняется с помощью:

df1 = df1.replace([np.inf, -np.inf], np.nan).dropna()
df2 = df2.replace([np.inf, -np.inf], np.nan).dropna()

Проблема заключается в том, что любая функция, которая ожидает, что два (n) dataframes columns будут иметь одинаковую длину, может выдавать ошибку, если в одном файле данных имеются неверные данные, но нет другого.

Как убрать не только плохую строку из оскорбительного dataframe, но и ту же строку из list of dataframes?

Таким образом, в случае двух dataframe, если в дате df1 index 2009-10-09 содержится «неверное» значение, эта же строка в df2 будет удалена.

[Возможно "некрасиво"? решение?] Я подозреваю, что один из способов сделать это - merge два (n) dataframes на дату, а затем применить функцию очистки, чтобы отбрасывать "плохие" значения автоматически, так как вся строка удаляется? Но что произойдет, если у одного dataframe отсутствует дата, а у другого нет? [и они все еще имеют одинаковую длину?]

1 Ответ

0 голосов
/ 14 января 2019

Doing replace

df1 = df1.replace([np.inf, -np.inf], np.nan)
df2 = df2.replace([np.inf, -np.inf], np.nan)

Тогда, здесь мы используем внутренний.

newdf=pd.concat([df1,df2],axis=1,keys=[1,2], join='inner').dropna()

И разделить его на два dfs, здесь мы используем combine_first с dropna оригинального df

df1,df2=[s[1].loc[:,s[0]].combine_first(x.dropna()) for x,s in zip([df1,df2],newdf.groupby(level=0,axis=1))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...