我需要对数据使用Hampel过滤器,以去除异常值。
我无法在Python中找到现有的;仅在Matlab和R中。
[Matlab功能说明] [1]
[关于Matlab Hampel函数的统计交流的讨论] [2]
[R pracma包装小插图;包含hampel功能] [3]
我已经编写了以下函数,并根据R pracma包中的函数对其进行了建模。但是,它远比Matlab版本慢。这不理想;将不胜感激有关如何加快速度的投入。
该功能如下所示-
def hampel(x,k, t0=3):
'''adapted from hampel function in R package pracma
x= 1-d numpy array of numbers to be filtered
k= number of items in window/2 (# forward and backward wanted to capture in median filter)
t0= number of standard deviations to use; 3 is default
'''
n = len(x)
y = x #y is the corrected series
L = 1.4826
for i in range((k + 1),(n …Run Code Online (Sandbox Code Playgroud) 看来这一定是我机器上的权限问题。在Windows 10上进行系统更新后,当我运行时:
import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
#save
plt.savefig("./figs/my_plot.jpg")
Run Code Online (Sandbox Code Playgroud)
它将在第一次运行代码时创建图形。如果我更改了代码(例如更改标签),然后重新运行,则Jupyter Notebook中显示的图将更新,但保存在我的计算机上的文件不会更新!在推出系统更新后,这是今天的新问题,因此这似乎是罪魁祸首。除了每次进行更改时都创建新文件名之外,我是否有解决此问题的见解?
我无法从 3 个单独的数字构建数据框。我想这样做是为了让函数返回数据帧,然后将其附加到其他现有结果。
所需的结果是一个包含名为“a”、“b”和“C”的列的数据框,每个列都包含 a、b 和 c 的值。
尝试一:
a=1
b=2
c=3
dat=pd.DataFrame([a,b,c], columns=list('abc')) #fails with size error
Run Code Online (Sandbox Code Playgroud)
尝试两个:
dat=pd.DataFrame()
dat['a']=pd.np.nan
dat['b']=pd.np.nan
dat['c']=pd.np.nan
dat['c']=c # no numbers are added to the column; still has 0 rows
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
想要的结果是:
a | b | c
-------------
1 | 2 | 3
Run Code Online (Sandbox Code Playgroud) 是否可以仅在 Jupyter 笔记本单元中执行突出显示的代码?这在 Spyder 和 RStudio 中是可能的。
我发现这对于在编写代码时排除故障非常有用。
如果一个单元格包含:
a=13
b=17
c=42
a=a*c
Run Code Online (Sandbox Code Playgroud)
我希望能够突出显示并仅运行所需的行(例如变量分配内存),而不是最后一行。
我经常在 Spyder 和 RStudio 中使用它,也很想在 Jupyter 中使用它。我发现我一直在拆分和重新组合单元格,以便对单行代码进行故障排除,例如,我错误地索引了某些内容。突出显示并打印变量让我可以看到我实际分配给它的内容并抛出错误,而不是我的意图。
如果连续 NAN 少于 3 个,我想填充 pandas 系列中的缺失值。
具有缺失值的原始系列:
s=pd.Series(pd.np.random.randn(20))
s[[1,3,5,7,12,13,14,15, 18]]=pd.np.nan
Run Code Online (Sandbox Code Playgroud)
给出:
0 0.444025
1 NaN
2 0.631753
3 NaN
4 -0.577121
5 NaN
6 1.299953
7 NaN
8 -0.252173
9 0.287641
10 0.941953
11 -1.624728
12 NaN
13 NaN
14 NaN
15 NaN
16 0.998952
17 0.195698
18 NaN
19 -0.788995
Run Code Online (Sandbox Code Playgroud)
但是,使用带有限制的 pandas.fillna() 只会填充指定的值数量(而不是预期的 CONSECUTIVE NAN 数量):
s.fillna(value=0, limit=3) #Fails to fill values at position 7 and forward
Run Code Online (Sandbox Code Playgroud)
所需的输出将在位置 1、3、5、7 和 18 处用 0 填充 NAN。它将在位置 12-15 处留下一系列 4 …
我在弄清楚如何对大熊猫日期时间索引的数据帧进行重新采样时遇到麻烦,但是需要最小数量的值才能给出一个值。我想将每日数据重新抽样到每月,并要求至少存在90%的值才能产生值。
输入每日数据:
import pandas as pd
rng = pd.date_range('1/1/2011', periods=365, freq='D')
ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)
ts['2011-01-01':'2011-01-05']=pd.np.nan #a short length of NANs to timeseries
ts['2011-10-03':'2011-10-30']=pd.np.nan #add ~ month long length of NANs to timeseries
Run Code Online (Sandbox Code Playgroud)
一月份只有几个NAN,但是十月份几乎是一个月的NAN,我想要每月重采样总和的输出:
ts.resample('M').sum()
Run Code Online (Sandbox Code Playgroud)
给出十月的NAN(丢失90%的每日数据)和一月份的NAN(丢失90%的数据),而不是当前输出:
2011-01-31 11.949479
2011-02-28 -1.730698
2011-03-31 -0.141164
2011-04-30 -0.291702
2011-05-31 -1.996223
2011-06-30 -1.936878
2011-07-31 5.025407
2011-08-31 -1.344950
2011-09-30 -2.035502
2011-10-31 -2.571338
2011-11-30 -13.492956
2011-12-31 7.100770
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这篇文章,使用滚动均值和min_periods; 我宁愿继续使用resample作为其直接的时间索引用途。这可能吗?我无法在重采样文档中找到很多内容或堆栈溢出来解决此问题。
python ×5
pandas ×4
dataframe ×1
figure ×1
fillna ×1
filter ×1
function ×1
matplotlib ×1
naming ×1
nan ×1
permissions ×1
resampling ×1
rstudio ×1
series ×1
spyder ×1
windows-10 ×1