从多个数据框中删除包含错误数据的行

时间:2019-01-13 21:02:57

标签: pandas dataframe

说我有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()

问题是,如果一个df中有错误数据,而另一个df中没有错误数据,则期望两个(n)dataframes columns具有相同长度的任何函数都可能会出错。 / p>

如何不仅从违规的dataframe中删除坏行,而且从list of dataframes中删除同一行?

因此,在两个dataframe情况下,如果在2009年10月9日的df1日期index中包含“错误”值,则df2中的同一行将被删除。

[可能是“丑陋”吗?解决方案?] 我怀疑这样做的一种方法是在日期merge两(n)dataframes,然后应用清除功能来自动删除“坏”值,因为整个行都被删除了吗?但是,如果一个dataframe而不是另一个缺少日期,该怎么办? [而且它们的长度仍然恰好相同吗?]

1 个答案:

答案 0 :(得分:1)

做您的replace

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

然后,在这里我们使用inner。

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

并将其拆分回两个df,这里我们将combine_first与原始df的dropna一起使用

df1,df2=[s[1].loc[:,s[0]].combine_first(x.dropna()) for x,s in zip([df1,df2],newdf.groupby(level=0,axis=1))]