说我有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
而不是另一个缺少日期,该怎么办? [而且它们的长度仍然恰好相同吗?]
答案 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))]