小编Ame*_*ina的帖子

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

HDF5比CSV占用更多空间?

请考虑以下示例:

准备数据:

import string
import random
import pandas as pd

matrix = np.random.random((100, 3000))
my_cols = [random.choice(string.ascii_uppercase) for x in range(matrix.shape[1])]
mydf = pd.DataFrame(matrix, columns=my_cols)
mydf['something'] = 'hello_world'
Run Code Online (Sandbox Code Playgroud)

设置HDF5可能的最高压缩:

store = pd.HDFStore('myfile.h5',complevel=9, complib='bzip2')
store['mydf'] = mydf
store.close()
Run Code Online (Sandbox Code Playgroud)

另外还保存为CSV:

mydf.to_csv('myfile.csv', sep=':')
Run Code Online (Sandbox Code Playgroud)

结果是:

  • myfile.csv 是5.6 MB大
  • myfile.h5 是11 MB大

随着数据集变大,差异越来越大.

我尝试过其他压缩方法和级别.这是一个错误吗?(我正在使用Pandas 0.11和HDF5和Python的最新稳定版本).

python hdf5 pytables pandas

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

计算数据帧组内的差异

假设我有一个包含3列的数据框:Date,Ticker,Value(没有索引,至少可以开始).我有很多日期和许多代码,但每个(ticker, date)元组都是独一无二的.(但显然相同的日期会出现在很多行中,因为它会存在多个代码,并且同一个代码将显示在多行中,因为它将存在很多日期.)

最初,我的行按特定顺序排列,但未按任何列排序.

我想计算每个股票代码的第一个差异(每日更改)(按日期排序),并将它们放在我的数据框中的新列中.鉴于这种背景,我不能简单地这样做

df['diffs'] = df['value'].diff()
Run Code Online (Sandbox Code Playgroud)

因为相邻的行不是来自同一个自动收报机.排序如下:

df = df.sort(['ticker', 'date'])
df['diffs'] = df['value'].diff()
Run Code Online (Sandbox Code Playgroud)

没有解决问题,因为会有"边界".即在那之后,一个股票代码的最后一个值将高于下一个股票代码的第一个值.然后计算差异会使两个代码之间产生差异.我不想要这个.我希望每个自动收报机的最早日期NaN在其差异列中结束.

这似乎是一个明显的使用时间,groupby但无论出于何种原因,我似乎无法让它正常工作.为了清楚起见,我想执行以下过程:

  1. 根据它们对行进行分组 ticker
  2. 在每个组中,按行分类 date
  3. 在每个已排序的组中,计算value列的差异
  4. 将这些差异放入新diffs列中的原始数据框中(理想情况下,保留原始数据框顺序).

我不得不想象这是一个单行.但是我错过了什么?


编辑于2013-12-17的晚上9点

好的...一些进展.我可以执行以下操作来获取新的数据帧:

result = df.set_index(['ticker', 'date'])\
    .groupby(level='ticker')\
    .transform(lambda x: x.sort_index().diff())\
    .reset_index()
Run Code Online (Sandbox Code Playgroud)

但是,如果我理解groupby的机制,我的行现在将首先排序ticker,然后排序date.那是对的吗?如果是这样,我是否需要进行合并以附加差异列(当前位于result['current']原始数据框中df

python pandas

31
推荐指数
4
解决办法
3万
查看次数

在Pandas中查询NaN和其他名字

假设我有一个df包含value一些浮点值的列的数据框和一些NaN.如何NaN 使用查询语法获取数据框的一部分?

例如,以下内容不起作用:

df.query( '(value < 10) or (value == NaN)' )
Run Code Online (Sandbox Code Playgroud)

我得到name NaN is not defined(同样的df.query('value ==NaN'))

一般来说,有没有办法在查询中使用numpy的名称,如inf,nan,pi,e,等?

python pandas

31
推荐指数
5
解决办法
2万
查看次数

Conda只卸载一个包和一个包

当我尝试pandas从我的conda虚拟环境中卸载时,我发现它还尝试卸载更多包:

$ conda uninstall pandas
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
Solving package specifications: .........

Package plan for package removal in environment /Users/amelio/anaconda/envs/py35:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    dask-0.7.6                 |           py35_0         276 KB

The following packages will be REMOVED:

    blaze:       0.10.1-py35_0
    odo:         0.5.0-py35_1
    pandas:      0.18.1-np111py35_0
    seaborn:     0.7.0-py35_0
    statsmodels: 0.6.1-np111py35_1

The following packages will be DOWNGRADED:

    dask:        0.10.1-py35_0      --> 0.7.6-py35_0

Proceed ([y]/n)?
Run Code Online (Sandbox Code Playgroud)

我想卸载pandas ,而不是有别的降级.

据我所知,这些包都依赖 …

python pip anaconda conda

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

如何停止跟踪文件而不在Mercurial上删除它

我看到了这个讨论解决方案的线程git,并在Mercurial的邮件列表中找到了这个帖子(该线程已经四年了)

邮件列表中提出的解决方案是使用hg rm -Af file(并且他们将实现此行为的可能性作为一种新的,更直观的选项).我想知道现在是否存在该选项.

另外,如果我尝试上面的命令:

> hg rm -Af my_file
> hg st
R my_file
Run Code Online (Sandbox Code Playgroud)

有一个R旁边my_file,但文件my_file在技​​术上是在磁盘上,我告诉Mercurial停止跟踪它,为什么我要R接下来呢?

mercurial

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

在R中保存和加载模型

使用插入符号时,如何在训练后保存模型,并在以后加载(例如在不同的会话中)进行预测?

r r-caret

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

最高后密度区和中心可信区

给定一些参数Θ的后p(Θ| D),可以定义以下内容:

最高后部密度区域:

最高后验密度区域是集合Θ的最可能值,在总构成后部100质量(1-α)%的.

换句话说,对于给定的α,我们寻找满足以下条件的p*:

在此输入图像描述

然后获得最高后部密度区域作为集合:

在此输入图像描述

中央可信区域:

使用与上述相同的表示法,可信区域(或区间)定义为:

在此输入图像描述

根据分布,可能有许多这样的间隔.中心可信区间定义为每个尾部(1-α)/ 2质量的可信区间.

计算:

  • 对于一般分布,从分布中给出样本,是否有任何内置函数可以在Python或PyMC中获得上述两个量?

  • 对于常见的参数分布(例如Beta,Gaussian等),是否有任何内置函数或库可以使用SciPystatsmodels进行计算?

python statistics scipy statsmodels pymc

26
推荐指数
5
解决办法
9651
查看次数

ack regex:在同一行中按顺序匹配两个单词

我想在文件中找到包含两个单词的行,word_1并按word_2顺序排列,例如在Line A下面,但不是在Line BLine C:

Line A: ... word_1 .... word_2 .... 
Line B: ... word_1 ....
Line C: ... word_2 ....
Run Code Online (Sandbox Code Playgroud)

我试过了

$ack '*word_1*word_2'
$ack '(word_1)+*(word_2)+'
Run Code Online (Sandbox Code Playgroud)

以及在^正则表达式开头附加的相同命令(试图遵循Perl正则表达式语法).

这些命令都不会返回我感兴趣的文件或行.

我究竟做错了什么?

谢谢!

regex ack

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

将宏添加到Python

我想在下面的代码中的任何地方调用以下代码MY_MACRO.

# MY_MACRO
frameinfo = getframeinfo(currentframe())
msg = 'We are on file ' + frameinfo.filename + ' and line ' +  str(frameinfo.lineno)
# Assumes access to namespace and the variables in which `MY_MACRO` is called. 
current_state = locals().items()
Run Code Online (Sandbox Code Playgroud)

以下是一些可以使用的代码MY_MACRO:

def some_function:
    MY_MACRO

def some_other_function:
    some_function()
    MY_MACRO

class some_class:
  def some_method:
     MY_MACRO
Run Code Online (Sandbox Code Playgroud)

如果它有帮助:

  1. 我想拥有这种能力的原因之一是因为我想避免重复MY_MACRO我需要它的地方的代码.拥有简短易用的东西会非常有帮助.
  2. 另一个原因是因为我希望嵌入IPython的外壳wihthin宏观和我想有机会获得在所有变量locals().items()(见本的其他问题)

这在Python中是否可行?什么是使这个工作最简单的方法?

注意,宏假定访问调用它的作用域的整个命名空间(即仅将代码MY_MACRO放在函数中不起作用).另请注意,如果我放在MY_MACRO一个函数中,lineno会输出错误的行号.

python macropy

25
推荐指数
3
解决办法
5万
查看次数

标签 统计

python ×7

pandas ×4

r ×2

ack ×1

anaconda ×1

conda ×1

hdf5 ×1

macropy ×1

mercurial ×1

pip ×1

pymc ×1

pytables ×1

r-caret ×1

regex ×1

scipy ×1

statistics ×1

statsmodels ×1