小编Ste*_*fan的帖子

大熊猫持续时间的日期

我觉得这应该很容易完成,但我无法弄清楚如何.我有一个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
查看次数

从MultiIndex DataFrame中采样

我与在以下面板数据的工作MultiIndex大熊猫DataFramedf_data:

              y         x
n   time                    
0   0     0.423607 -0.307983
    1     0.565563 -0.333430
    2     0.735979 -0.453137
    3     0.962857  1.671106
1   0     0.772304  1.221366
    1     0.455327 -1.024852
    2     0.864768  0.609867
    3     0.334429 -2.567936
2   0     0.435553 -0.259228
    1     0.221501  0.484677
    2     0.773628  0.650288
    3     0.293902  0.566452
Run Code Online (Sandbox Code Playgroud)

n索引一个人(其中有500个),t索引时间.这是一个平衡的面板.我想创建一个随机抽样的nn=100个人样本.此外,如果个人将其作为随机样本,则应将该个体的所有4次观察(t = 0,1,2,3)分配给样本.

以下几行几乎是我想要的:

df_sample = df_data.loc[np.random.randint(3, size=100).tolist()]
Run Code Online (Sandbox Code Playgroud)

但是,它不会反复对个人进行抽样.因此,如果创建的随机变量列表是[2,3,2,4,1,...],则第三个人(index = 2是第三个人)仅被选择一次而不是随机样本的两次.这意味着只要上面的随机向量包含同一个体不止一次,我就会在随机样本中得到少于100个个体(每次有4次观察).我也尝试过这个df_data.sample函数,但我似乎无法处理面板中的特定多级索引.我可以编写各种循环来完成这项工作,但我认为应该有一种更简单(更快)的方法.我使用的是Python 3.5,我使用的是pandas版本0.17.1.谢谢.

python sampling dataframe pandas

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

将趋势线添加到pandas

我有时间序列数据,如下:

                  emplvl
date                    
2003-01-01  10955.000000
2003-04-01  11090.333333
2003-07-01  11157.000000
2003-10-01  11335.666667
2004-01-01  11045.000000
2004-04-01  11175.666667
2004-07-01  11135.666667
2004-10-01  11480.333333
2005-01-01  11441.000000
2005-04-01  11531.000000
2005-07-01  11320.000000
2005-10-01  11516.666667
2006-01-01  11291.000000
2006-04-01  11223.000000
2006-07-01  11230.000000
2006-10-01  11293.000000
2007-01-01  11126.666667
2007-04-01  11383.666667
2007-07-01  11535.666667
2007-10-01  11567.333333
2008-01-01  11226.666667
2008-04-01  11342.000000
2008-07-01  11201.666667
2008-10-01  11321.000000
2009-01-01  11082.333333
2009-04-01  11099.000000
2009-07-01  10905.666667
Run Code Online (Sandbox Code Playgroud)

时间序列图

我想以最简单的方式在该图上添加线性趋势(带截距).此外,我想计算这一趋势,仅以2006年之前的数据为条件.

我在这里找到了一些答案,但它们都包括在内statsmodels.首先,这些答案可能不是最新的:pandas改进,现在本身包括一个OLS组件.其次,statsmodels似乎估计每个时间段的个体固定效应,而不是线性趋势.我想我可以重新计算一个运行季度变量,但是大多数人都有更舒服的方法吗?

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 emplvl   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                    nan
Method: …
Run Code Online (Sandbox Code Playgroud)

python machine-learning matplotlib pandas statsmodels

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

如何添加最适合散点图的线条

我目前正在使用Pandas和matplotlib来执行一些数据可视化,我想在散点图中添加一条最适合的线.

这是我的代码:

import matplotlib
import matplotlib.pyplot as plt
import pandas as panda
import numpy as np

def PCA_scatter(filename):

   matplotlib.style.use('ggplot')

   data = panda.read_csv(filename)
   data_reduced = data[['2005', '2015']]

   data_reduced.plot(kind='scatter', x='2005', y='2015')
   plt.show()

PCA_scatter('file.csv')
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

python plot numpy matplotlib pandas

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

使用 tensorflow 在 docker 上导入 pandas

我正在使用 Windows 并学习使用 tensorflow,所以我需要在 Docker(工具箱)下运行它。

按照通常的说明:

$ docker run -it gcr.io/tensorflow/tensorflow
Run Code Online (Sandbox Code Playgroud)

我可以在我的浏览器上启动一个 Jupyter notebook192.168.99.100:8888并运行教程 notebook 没有问题。

现在,当我尝试import pandas as pd使用 pip 安装在我的计算机上时,在 Juypter 上它只是说ImportError: No module named pandas

知道如何让这个库在从 docker 启动的 tensorflow 图像中工作吗?

截屏

python machine-learning pandas docker tensorflow

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

池工作者的Python多进程 - 内存使用优化

我有一个模糊的字符串匹配脚本,在400万公司名称的大海捞针中寻找大约30K针.虽然脚本工作正常,但我在AWS h1.xlarge上通过并行处理加速处理的尝试失败了,因为我的内存不足.

我不想试图获得更多内存,而是根据我之前的问题解释,我想找出如何优化工作流程 - 我对此很新,所以应该有足够的空间.顺便说一句,我已经尝试过排队(虽然工作但是遇到了同样的问题MemoryError,再看看一堆非常有用的SO贡献,但还没有完成.)

这是与代码最相关的内容.我希望它足以澄清逻辑 - 很高兴根据需要提供更多信息:

def getHayStack():
    ## loads a few million company names into id: name dict
    return hayCompanies

def getNeedles(*args):
    ## loads subset of 30K companies into id: name dict (for allocation to workers)
    return needleCompanies

def findNeedle(needle, haystack):
    """ Identify best match and return results with score """
    results = {}
    for hayID, hayCompany in haystack.iteritems():
        if not isnull(haystack[hayID]):
            results[hayID] = levi.setratio(needle.split(' '), 
                                           hayCompany.split(' '))
    scores = list(results.values()) …
Run Code Online (Sandbox Code Playgroud)

python performance memory-management multiprocessing string-matching

5
推荐指数
1
解决办法
2557
查看次数

如何在pandas数据帧中过滤属于特定列的第1和第3四分位数的行?

我正在使用python中的数据框如何过滤所有具有特定列值的行,例如val,它们属于第1和第3四分位数.

谢谢.

python dataframe python-2.7 pandas

5
推荐指数
1
解决办法
2801
查看次数

如何从两个DataFrame中订购和保留公共索引

我有两个DataFrames:

import pandas as pd
import io
from scipy import stats


ctrl=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20,0.00,11
1415884_at Cela3b,47,0.00,100
1415805_at Clps,17,0.00,55
1115805_at Ckkk,77,10.00,5.5
"""

df_ctrl = pd.read_csv(io.StringIO(ctrl),index_col='probegenes')

test=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20.1,10.00,22.3
1415805_at Clps,7,3.00,1.5
1415884_at Cela3b,47,2.01,30"""

df_test = pd.read_csv(io.StringIO(test),index_col='probegenes')
Run Code Online (Sandbox Code Playgroud)

它们看起来像这样:

In [35]: df_ctrl
Out[35]:
                     sample1  sample2  sample3
probegenes
1415777_at Pnliprp1       20        0     11.0
1415884_at Cela3b         47        0    100.0
1415805_at Clps           17        0     55.0
1115805_at Ckkk           77       10      5.5

In [36]: df_test
Out[36]:
                     sample1  sample2  sample3
probegenes
1415777_at Pnliprp1     20.1    10.00     22.3
1415805_at Clps …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
61
查看次数

从两个不相关的系列创建DataFrame的最有效方法是什么?

我正在寻找创建一个数据框架,该数据框架是两个不相关的系列的组合。

如果我们采用两个数据框:

A = ['a','b','c']
B = [1,2,3,4]

dfA = pd.DataFrame(A)
dfB = pd.DataFrame(B)
Run Code Online (Sandbox Code Playgroud)

我正在寻找此输出:

    A  B
0   a  1
1   a  2
2   a  3
3   a  4
4   b  1
5   b  2
6   b  3
7   b  4
8   c  1
9   c  2
10  c  3
11  c  4
Run Code Online (Sandbox Code Playgroud)

一种方法可能是使列表直接循环并创建DataFrame,但必须有更好的方法。我确定我在熊猫文件中遗漏了一些东西。

result = []
for i in A:
    for j in B:
        result.append([i,j])

result_DF = pd.DataFrame(result,columns=['A','B'])
Run Code Online (Sandbox Code Playgroud)

最终,我正在考虑将月份和UUID结合起来,可以正常工作,但是计算需要花费很多时间,并且对索引的依赖过多。通用解决方案显然会更好:

from datetime import datetime

start = datetime(year=2016,month=1,day=1)
end = datetime(year=2016,month=4,day=1) …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

5
推荐指数
1
解决办法
433
查看次数

按时计算后在数据框中添加新列

DataFrame喜欢这样的:

          Name           first_seen       last_seen
   0      Random guy 1   5/22/2016 18:12  5/22/2016 18:15 
   1      Random guy 2   5/22/2016 12:03  5/22/2016 12:03 
   2      Random guy 3   5/22/2016 21:06  5/22/2016 21:06
   3      Random guy 4   5/22/2016 16:20  5/22/2016 16:20 
   4      Random guy 5   5/22/2016 14:46  5/22/2016 14:46 
Run Code Online (Sandbox Code Playgroud)

现在我必须添加一个columnnamed Visit_period,[morning,afternoon,evening,night]当该person(row)花费的最长时间落入时,它将获取4个值中的一个:

 - morning: 08:00 to 12:00 hrs
 - afternoon: 12:00 to 16:00 hrs
 - evening: 16:00 to 20:00 hrs
 - night: 20:00 to 24:00 hrs
Run Code Online (Sandbox Code Playgroud)

所以对于上面的五行输出将是这样的. …

python python-2.7 pandas

5
推荐指数
1
解决办法
974
查看次数