我有一个熊猫数据框,只有几栏。
现在我知道某些行是基于特定列值的异常值。
举个例子
列Vol包含12xx周围的所有值,其中一个值是4000(异常值)。
现在,我想排除那些像这样有Vol
列的行。
所以,本质上我需要在数据框上放置一个过滤器,这样我们就可以选择所有行,其中某一列的值在,比如说,平均值的3个标准偏差之内。
实现这一点的优雅方式是什么?
对于每个dataframe列,您可以通过以下方式获得分位数:
q = df["col"].quantile(0.99)
然后过滤:
df[df["col"] < q]
如果需要删除下限和上限异常值,请将条件与and语句结合使用:
q_low = df["col"].quantile(0.01)
q_hi = df["col"].quantile(0.99)
df_filtered = df[(df["col"] < q_hi) & (df["col"] > q_low)]
使用布尔索引,就像在numpy.array中一样
df = pd.DataFrame({'Data':np.random.normal(size=200)})
# example dataset of normally distributed data.
df[np.abs(df.Data-df.Data.mean()) <= (3*df.Data.std())]
# keep only the ones that are within +3 to -3 standard deviations in the column 'Data'.
df[~(np.abs(df.Data-df.Data.mean()) > (3*df.Data.std()))]
# or if you prefer the other way around
对于一个系列,它类似于:
S = pd.Series(np.random.normal(size=200))
S[~((S-S.mean()).abs() > 3*S.std())]
如果您的dataframe中有多个列,并且希望删除至少一列中包含异常值的所有行,那么下面的表达式可以一次性完成此操作。
df = pd.DataFrame(np.random.randn(100, 3))
from scipy import stats
df[(np.abs(stats.zscore(df)) < 3).all(axis=1)]
说明:
zcore
指定一列,例如df[0]
,并删除. all(轴=1)
。df[(np.abs(stats.zscore(df[0])) < 3)]
问题内容: 我有一个只有几列的熊猫数据框。 现在我知道某些行是基于某个列值的离群值。 例如 “ Vol”列的所有值都在周围,12xx而一个值是4000(离群值)。 现在,我想排除具有Vol此类列的行。 因此,从本质上讲,我需要在数据帧上放置一个过滤器,以便我们选择某一列的值在均值例如3个标准差以内的所有行。 有什么优雅的方法可以做到这一点? 问题答案: 如果你的数据框中有多个列,并且希望删除至少一
我有一个很少列的熊猫数据帧。 现在我知道某些行是基于某个列值的离群值。 例如: 列“vol”具有附近的所有值,其中一个值为(离群值)。 现在,我想排除那些具有列的行,如下所示。 所以,本质上我需要在数据帧上放一个过滤器,这样我们就可以选择某一列的值在均值的3个标准差范围内的所有行。 什么是一个优雅的方法来实现这一点?
我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?
我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!
假设熊猫数据帧如下所示: 如何将第三行(如row3)提取为pd数据帧?换句话说,row3.shape应该是(1,5),row3.head()应该是:
问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen