相关疑难解决方法(0)

检测并排除Pandas数据帧中的异常值

我有一个包含很少列的pandas数据帧.

现在我知道某些行是基于某个列值的异常值.

例如列 - 'Vol'的所有值都大约为12xx,一个值为4000(异常值).

现在我想排除那些有'Vol'列的行.因此,基本上我需要在数据框上放置一个过滤器,以便我们选择所有行,其中某列的值在与平均值相差3个标准差的范围内.

实现这一目标的优雅方式是什么?

python filtering outliers dataframe pandas

174
推荐指数
12
解决办法
19万
查看次数

规范化pandas中的数据

假设我有一个pandas数据框df:

我想计算数据框的列方式.

这很简单:

df.apply(average) 
Run Code Online (Sandbox Code Playgroud)

然后列方式范围max(col) - min(col).这很容易再次:

df.apply(max) - df.apply(min)
Run Code Online (Sandbox Code Playgroud)

现在对于每个元素,我想减去其列的平均值并除以其列的范围.我不知道该怎么做

任何帮助/指针都非常感谢.

python numpy pandas

126
推荐指数
3
解决办法
21万
查看次数

使用NaN在熊猫中按列对数据进行Winsoring

我想对熊猫数据框中的几列数据进行解冻。每列都有一些NaN,这会影响winsorization,因此需要将其删除。我知道如何执行此操作的唯一方法是针对所有数据删除它们,而不是仅逐列删除它们。

MWE:

import numpy as np
import pandas as pd
from scipy.stats.mstats import winsorize

# Create Dataframe
N, M, P = 10**5, 4, 10**2
dates = pd.date_range('2001-01-01', periods=N//P, freq='D').repeat(P)
df = pd.DataFrame(np.random.random((N, M))
                  , index=dates)
df.index.names = ['DATE']
df.columns = ['one','two','three','four']
# Now scale them differently so you can see the winsorization
df['four'] = df['four']*(10**5)
df['three'] = df['three']*(10**2)
df['two'] = df['two']*(10**-1)
df['one'] = df['one']*(10**-4)
# Create NaN
df.loc[df.index.get_level_values(0).year == 2002,'three'] = np.nan
df.loc[df.index.get_level_values(0).month == 2,'two'] = np.nan
df.loc[df.index.get_level_values(0).month …
Run Code Online (Sandbox Code Playgroud)

python nan scipy missing-data pandas

3
推荐指数
1
解决办法
2537
查看次数

标签 统计

pandas ×3

python ×3

dataframe ×1

filtering ×1

missing-data ×1

nan ×1

numpy ×1

outliers ×1

scipy ×1