小编Ale*_*der的帖子

Python pandas没有属性ols - 错误(滚动OLS)

对于我的评估,我想 使用以下脚本运行OLS regression estimation此URL中的数据集滚动1000窗口:https: //drive.google.com/open?id =Python 0B2Iv8dfU4fTUa3dPYW5tejA0bzg.

# /usr/bin/python -tt

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.formula.api import ols

df = pd.read_csv('estimated.csv', names=('x','y'))

model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['y']], 
                               window_type='rolling', window=1000, intercept=True)
df['Y_hat'] = model.y_predict
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的Python脚本时,我收到此错误:AttributeError: module 'pandas.stats' has no attribute 'ols'.这个错误可能来自我正在使用的版本吗?在pandas安装我的Linux节点上有一个版本的0.20.2

python linear-regression python-3.x pandas statsmodels

4
推荐指数
1
解决办法
7403
查看次数

合并数据框时用零填充缺失日期的数据

import pandas as pd\nimport numpy as np\n\none = pd.read_csv('data1.csv')\ntwo = pd.read_csv('data2.csv')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我这样写代码,其中一个显示

\n\n
A    Date\n10    2011-01-03\n20    2011-01-04\n10    2011-01-06\n20    2011-01-07\n30    2011-01-10\n40    2011-01-13\n25    2011-01-15\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

两个\xc2\xa0显示

\n\n
B    Date\n15    2011-01-01\n15    2011-01-02\n15    2011-01-03\n25    2011-01-07\n35    2011-01-10\n10    2011-01-13\n25    2011-01-15\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想在数据框被标记时将 0 添加到缺失的 date\xe2\x80\x99s 数据中。\n现在我编写了代码

\n\n
one_and_two = pd.merge(one, two, on='Date', how='inner')\nprint(one_and_two)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并运行,one_and_two 是

\n\n
   \xe3\x80\x80A        Date  \xe3\x80\x80 B\n0  10  2011-01-03  15\n1  20  2011-01-07  25\n2  30  2011-01-10  35\n3  40  2011-01-13  10\n4  25  2011-01-15  25\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

理想的输出是

\n\n
   \xe3\x80\x80A        Date  \xe3\x80\x80 B\n0  0  2011-01-01 …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
5218
查看次数

对具有不规则时间间隔的大型数据集进行快速 EMA 计算

我有超过 800,000 行的数据。我想取其中一列的指数移动平均线 (EMA)。时间不是均匀采样的,我想在每次更新(行)时衰减 EMA。我的代码是这样的:

window = 5            
for i in range(1, len(series)):
    dt = series['datetime'][i] - series['datetime'][i - 1]
    decay = 1 - numpy.exp(-dt / window)
    result[i] = (1 - decay) * result[i - 1] + decay * series['midpoint'].iloc[i]
return pandas.Series(result, index=series.index)
Run Code Online (Sandbox Code Playgroud)

问题是,对于 800,000 行,这非常慢。无论如何使用numpy的其他一些功能来优化它?我无法对其进行矢量化,因为results[i]它依赖于results[i-1].

示例数据在这里:

Timestamp             Midpoint
1559655000001096130    2769.125
1559655000001162260    2769.127
1559655000001171688    2769.154
1559655000001408734    2769.138
1559655000001424200    2769.123
1559655000001433128    2769.110
1559655000001541560    2769.125
1559655000001640406    2769.125
1559655000001658436    2769.127
1559655000001755924    2769.129
1559655000001793266    2769.125
1559655000001878688    2769.143
1559655000002061024    2769.125
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

4
推荐指数
1
解决办法
1148
查看次数

返回两个列表python?

我不确定返回在以下比较函数中是如何工作的?为什么它会返回这样的格式?

def func(self, num):
      num = sorted([str(x) for x in num], cmp=self.compare) 

def compare(self, a, b):
      return [1, -1][a + b > b + a]
Run Code Online (Sandbox Code Playgroud)

python list

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

如何使用 Pandas 在 Python 中获取多年平均值

我有一个大数据集,其中包含来自多个位置(以纬度/经度给出)超过 80 年的数据。我正在尝试计算整个时间范围内每个站点的 a 列和 b 列的 10 年平均值。下面是数据表的示例。

     Lat       Long Year Month Day      a      b
46.90625 -115.46875 1950    01  01 0.0000 1.1335
46.90625 -115.46875 1950    01  02 0.0000 1.1276 
46.90625 -115.46875 1950    01  03 0.0000 1.1213
Run Code Online (Sandbox Code Playgroud)

这是我尝试过但一直迷失方向的示例。

fname = output1
df = pandas.read_table(output1)  
lat_long_group = df.groupby(['Lat','Long','Year']).agg(['mean','count'])
monthly_average = lat_long_group.aggregate({'a':numpy.mean,
                                            'b': numpy.mean})
Run Code Online (Sandbox Code Playgroud)

python numpy time-series pandas

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

Pandas - 将两列作为字典转换为新列

我正在尝试使用Pandas将两列转换为一列,该列是两个转换列的字典表示.

df = DataFrame({'Metrics' : [[("P", "P"), ("Q","Q")], ("K", "K"), ("Z", "Z")], 
                'Stage_Name' : ["P", "K", "Z"],  
                'Block_Name' : ["A", "B", "A"]})
Run Code Online (Sandbox Code Playgroud)

基本上我想合并MetricsStage_Name:

在此输入图像描述

进入另一个名为的列merged,例如,第一行将是:

{'P': [('P', 'P'), ('Q', 'Q')]}
Run Code Online (Sandbox Code Playgroud)

我知道如何将一行转换为字典表示,但是,我不知道如何在没有for循环的情况下对所有行执行此操作:

something = df.iloc[[0]].set_index('Stage_Name')['Metrics'].to_dict()
print something
Output: {'P': [('P', 'P'), ('Q', 'Q')]}
Run Code Online (Sandbox Code Playgroud)

后来我想基于聚合Block_Name,所以对于合并列,结果将是两个字典加在一起Block_Name:A.

{'P': [('P', 'P'), ('Q', 'Q')], 'Z' : [('Z', 'Z')] }
Run Code Online (Sandbox Code Playgroud)

对于Stage_NameMetrics,我只是将它附加到列表中,如下所示:

grouped = df.groupby(df['Block_Name'])
df_2 = grouped.aggregate(lambda x: tuple(x))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有人能指出我正确的方向吗?谢谢!

python pandas

3
推荐指数
2
解决办法
2229
查看次数

熊猫系列中列表的有效串联

我有以下系列:

s = pd.Series([['a', 'b'], ['c', 'd'], ['f', 'g']])
>>> s
0    [a, b]
1    [c, d]
2    [f, g]
dtype: object
Run Code Online (Sandbox Code Playgroud)

什么是串联该系列中所有列表的最简单方法(最好是矢量化方法),所以我得到:

l = ['a', 'b', 'c', 'd', 'f', 'g']
Run Code Online (Sandbox Code Playgroud)

谢谢!

python list concatenation pandas

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

在切片/重置索引后使用 iterrows() 与 Pandas DF 时出现问题

我从 CSV 文件中读取了数千行,其中包含用于计算不同输出的数据。我读取这个 CSV 文件并将输入存储在 Pandas 数据框中。然后我用来itterrows()循环数据帧。有时我的代码会失败,此时我希望读取原始文件,但在失败后的行中拾取进程。因此,当发生这种情况时,请设置我的代码,以便在进入 for 循环之前取消注释两行并将原始数据帧缩小到一定大小itterrows()

# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
for index,row in df_slice.iterrows():
Run Code Online (Sandbox Code Playgroud)

然而,如果我如上所示对原始数据帧进行切片,“itterrows()”循环中的索引值将从 1292 开始,因此会从较小的切片数据帧顶部跳过 1292 个位置。如何让它从 0/1 开始?

我尝试重置索引:

# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
df_slice.reset_index()

for index,row in df_slice.iterrows():
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何事情 - 蒸馏器中的索引for index,row in df_slice.iterrows():停留在 1292,因此切片索引下降了 1292 个位置。

那么,我如何才能直接iterrows()到某个起始行(在原始索引上)或正确地切片并重置较小数据帧的索引,以便能够从新的“顶”行开始并向下移动。

python dataframe pandas

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

如何合并多级(即多索引)数据帧?

在“cell1”和“cell2”下的列“t”上合并多级数据框的python/panda方法是什么?

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.arange(4).reshape(2, 2), 
               columns = [['cell 1'] * 2, ['t', 'sb']])
df2 = pd.DataFrame([[1, 5], [2, 6]], 
           columns = [['cell 2'] * 2, ['t', 'sb']])
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试合并时"t",python REPL 将出错

ddf = pd.merge(df1, df2, on='t', how='outer')
Run Code Online (Sandbox Code Playgroud)

有什么好的方法来处理这个问题?

python dataframe pandas

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

查找长列表中多个元素的索引

我有一个很长的lst包含独特元素.我想设计一个函数,它将元素列表作为输入,它可以有效地返回索引列表.我们假设找到他们的索引所需的项目都在lst.

这是一个例子:

lst = ['ab','sd','ef','de']
items_to_find = ['sd', 'ef', 'sd']
>>> fo(lst, items_to_find)  
# Output: [1,2,1]
Run Code Online (Sandbox Code Playgroud)

我有一个自己的解决方案,但效率不高.

>> [lst.index(x) for x in items_to_find]
Run Code Online (Sandbox Code Playgroud)

因为lst它很长,我需要一个非常快速的算法来解决它.

python

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