小编Ste*_*fan的帖子

时间序列分析 - 不均匀间隔的测量 - 熊猫+ statsmodels

我有两个numpy数组light_points和time_points,并希望对这些数据使用一些时间序列分析方法.

然后我尝试了这个:

import statsmodels.api as sm
import pandas as pd
tdf = pd.DataFrame({'time':time_points[:]})
rdf =  pd.DataFrame({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(freq='w',start=0,periods=len(rdf.light))
#rdf.index = pd.DatetimeIndex(tdf['time'])
Run Code Online (Sandbox Code Playgroud)

这有效,但没有做正确的事情.实际上,测量不是均匀的时间间隔,如果我只是将time_points pandas DataFrame声明为我的帧的索引,我会收到一个错误:

rdf.index = pd.DatetimeIndex(tdf['time'])

decomp = sm.tsa.seasonal_decompose(rdf)

elif freq is None:
raise ValueError("You must specify a freq or x must be a pandas object with a timeseries index")

ValueError: You must specify a freq or x must be a pandas object with a timeseries index
Run Code Online (Sandbox Code Playgroud)

我不知道如何纠正这个问题.此外,似乎大熊猫TimeSeries已被弃用.

我试过这个:

rdf = pd.Series({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(tdf['time'])
Run Code Online (Sandbox Code Playgroud)

但它给我一个长度不匹配: …

python machine-learning time-series pandas statsmodels

9
推荐指数
1
解决办法
1万
查看次数

Python文本处理:NLTK和pandas

我正在寻找一种有效的方法来构建Python中的术语文档矩阵,可以与额外的数据一起使用.

我有一些带有一些其他属性的文本数据.我想对文本进行一些分析,我希望能够将从文本中提取的特征(例如单个字标记或LDA主题)与其他属性相关联.

我的计划是将数据加载为pandas数据框,然后每个响应都代表一个文档.不幸的是,我遇到了一个问题:

import pandas as pd
import nltk

pd.options.display.max_colwidth = 10000

txt_data = pd.read_csv("data_file.csv",sep="|")
txt = str(txt_data.comment)
len(txt)
Out[7]: 71581 

txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[10]: 45

txt_lines = []
f = open("txt_lines_only.txt")
for line in f:
    txt_lines.append(line)

txt = str(txt_lines)
len(txt)
Out[14]: 1668813

txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[17]: 10086
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,文本的处理方式只有空格,字母和.?!被删除(为简单起见).

如您所见,转换为字符串的pandas字段返回的匹配项更少,字符串的长度也更短.

有没有办法改进上面的代码?

此外,str(x)在注释中[str(x) for x in txt_data.comment]创建一个大字符串,同时创建一个列表对象,该列表对象无法分解成一堆单词.生成nltk.Text保留文档索引的对象的最佳方法是什么?换句话说,我正在寻找一种方法来创建一个术语文档矩阵,R等同TermDocumentMatrix()tm包.

非常感谢.

python machine-learning nltk pandas

9
推荐指数
1
解决办法
1万
查看次数

将Pandas DataFrame保存到Django模型

我有一个存储在pandas DataFrame中的股票价格数据,如下所示(实际上它在面板中,但我将其转换为DataFrame)

        date  ticker  close       tsr
0 2013-03-28  abc     22.81  1.000439
1 2013-03-28  def     94.21  1.006947
2 2013-03-28  ghi     95.84  1.014180
3 2013-03-28  jkl     31.80  1.000000
4 2013-03-28  mno     32.10  1.003125
...many more rows
Run Code Online (Sandbox Code Playgroud)

我想将它保存在Django模型中,它看起来像这样(匹配列名):

class HistoricalPrices(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    tsr = models.DecimalField()
    close = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)

我到目前为止最好的用它来保存它,其中df是我的DataFrame:

entries = []
for e in df.T.to_dict().values():
    entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来保存这个?

我看过django-pandas,但看起来它只是从数据库读取.

python django pandas

9
推荐指数
1
解决办法
7868
查看次数

计算所有列之间的成对相关性

我正在使用大型生物数据集.

我想计算数据表中所有2列组合的PCC(Pearson相关系数),并将结果保存为DataFrame或CSV文件.

数据表如下所示:列是基因的名称,行是数据集的代码.浮点数表示基因在数据集中的激活程度.

      GeneA GeneB GeneC ...
DataA 1.5 2.5 3.5 ...
DataB 5.5 6.5 7.5 ...
DataC 8.5 8.5 8.5 ...
...
Run Code Online (Sandbox Code Playgroud)

作为输出,我想构建如下所示的表(DataFrame或csv文件),因为scipy.stats.pearsonr函数返回(PCC,p值).在我的例子中,XX和YY表示pearsonr的结果([1.5,5.5,8.5],[2.5,6.5,8.5]).同样,ZZ和AA表示皮尔逊([1.5,5.5,8.5],[3.5,7.5,8.5])的结果.在我的测试中,我不需要像GeneB_GeneA或GeneC_GeneB这样的冗余数据.

               PCC P-value
GeneA_GeneB    XX YY
GeneA_GeneC    ZZ AA
GeneB_GeneC    BB CC
...
Run Code Online (Sandbox Code Playgroud)

由于列数和行数很多(超过100)并且它们的名称很复杂,因此使用列名或行名将很困难.

对于专家来说这可能是一个简单的问题,我不知道如何使用python和pandas库来处理这种表.特别是制作新的DataFrame并添加结果似乎非常困难.

抱歉我的解释不好,但我希望有人可以帮助我.

python correlation pandas

8
推荐指数
2
解决办法
1万
查看次数

如何自定义DataFrame显示的标题和列宽?

作为一项规则,我喜欢使用长的描述性列名(例如,estimated_background_signal而不仅仅是bg)用于DataFrame对象.这种偏好的一个缺点是,DataFrame显示形式有几列比它们的值要宽得多.例如:

In [10]: data.head()
     barcode estimated_background_signal inhibitor_code inhibitor_concentration
0  R00577279                         133            IRB                   0.001
1  R00577279                         189            SNZ                   0.001
2  R00577279                         101            CMY                   0.001
3  R00577279                         112            BRC                   0.001
4  R00577279                         244            ISB                   0.001
Run Code Online (Sandbox Code Playgroud)

如果显示器更窄则会很好.无视标题,最窄的显示将是:

0 R00577279 113 IRB 0.001
1 R00577279 189 SNZ 0.001
2 R00577279 101 CMY 0.001
3 R00577279 112 BRC 0.001
4 R00577279 244 ISB 0.001
Run Code Online (Sandbox Code Playgroud)

......但完全取消标题并不是一个完全令人满意的解决方案.一个更好的方法是使显示宽度足以允许一些标题,可能占用几行:

    barcode estim inhib inhib
            ated_ itor_ itor_
            backg code  conce
0 R00577279 …
Run Code Online (Sandbox Code Playgroud)

pandas

7
推荐指数
1
解决办法
577
查看次数

Python Pandas - 读取包含多个表的csv文件

我有一个.csv包含多个表的文件.

使用熊猫,这将是拿到两个数据帧的最佳策略inventory,并HPBladeSystemRack从这个文件?

输入.csv看起来像这样:

Inventory       
System Name            IP Address    System Status
dg-enc05                             Normal
dg-enc05_vc_domain                   Unknown
dg-enc05-oa1           172.20.0.213  Normal

HP BladeSystem Rack         
System Name               Rack Name   Enclosure Name
dg-enc05                  BU40  
dg-enc05-oa1              BU40        dg-enc05
dg-enc05-oa2              BU40        dg-enc05
Run Code Online (Sandbox Code Playgroud)

到目前为止,我提出的最好的方法是将此.csv文件转换为Excel工作簿(xlxs),将表拆分为表并使用:

inventory = read_excel('path_to_file.csv', 'sheet1', skiprow=1)
HPBladeSystemRack = read_excel('path_to_file.csv', 'sheet2', skiprow=2)
Run Code Online (Sandbox Code Playgroud)

然而:

  • 这种方法需要xlrd模块.
  • 必须实时分析这些日志文件,以便找到一种分析它们来自日志的方法.
  • 真实的日志有比这两个更多的表.

python csv excel python-2.7 pandas

7
推荐指数
1
解决办法
7256
查看次数

将OLS回归摘要打印到文本文件

pandas.stats.api.ols使用groupby带有以下代码的运行OLS回归:

from pandas.stats.api import ols
df=pd.read_csv(r'F:\file.csv')

result=df.groupby(['FID']).apply(lambda d: ols(y=d.loc[:, 'MEAN'], x=d.loc[:, ['Accum_Prcp', 'Accum_HDD']]))
for i in result:
    x=pd.DataFrame({'FID':i.index, 'delete':i.values})
    frame = pd.concat([x,DataFrame(x['delete'].tolist())], axis=1, join='outer')
    del frame['delete']
    print frame
Run Code Online (Sandbox Code Playgroud)

但是这会返回错误:

AttributeError: 'OLS' object has no attribute 'index'
Run Code Online (Sandbox Code Playgroud)

我的组中有大约2,000个项目,当我打印出每个项目时,它们看起来像这样:

-

------------------------Summary of Regression Analysis-------------------------

Formula: Y ~ <Accum_Prcp> + <Accum_HDD> + <intercept>

Number of Observations:         79
Number of Degrees of Freedom:   3

R-squared:         0.1242
Adj R-squared:     0.1012

Rmse:              0.1929

F-stat (2, 76):     5.3890, p-value:     0.0065

Degrees of Freedom: …
Run Code Online (Sandbox Code Playgroud)

python csv linear-regression pandas statsmodels

7
推荐指数
2
解决办法
8343
查看次数

在列上应用sqrt函数

我有以下数据框架

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
                'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'],
                'wins': [11, 8, 10, 15, 11, 6, 10, 4],
                'losses': [5, 8, 6, 1, 5, 10, 6, 12]}

football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses'])
football.set_index(['team', 'year'], inplace=True)
Run Code Online (Sandbox Code Playgroud)

sqrt在对列进行求和后,如何应用函数?

football[['wins', 'losses']].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

熊猫将数据框列单元格初始化为空列表

我需要初始化 a 列中的单元格DataFrameto lists

df['some_col'] = [[] for _ in no_of_rows]
Run Code Online (Sandbox Code Playgroud)

我想知道在时间效率方面有没有更好的方法来做到这一点?

python series dataframe python-3.x pandas

7
推荐指数
2
解决办法
5342
查看次数

大熊猫持续时间的日期

我觉得这应该很容易完成,但我无法弄清楚如何.我有一个pandas DataFrame日期:

0    2012-08-21
1    2013-02-17
2    2013-02-18
3    2013-03-03
4    2013-03-04
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

我希望有一列持续时间,例如:

0    0
1    80 days
2    1 day
3    15 days
4    1 day
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

我的尝试产生了大量的0天NaT而是:

>>> df.date[1:] - df.date[:-1]
0       NaT
1    0 days
2    0 days
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python timedelta pandas

6
推荐指数
2
解决办法
93
查看次数