小编Tom*_*Cho的帖子

与熊猫系列的多月平均值

我有一系列的datetime对象和一系列数据,这些数据跨越了几年.A可以创建一个Series对象并重新取样以按月分组:

df=pd.Series(varv,index=dates)
multiMmean=df.resample("M", how='mean')
print multiMmean
Run Code Online (Sandbox Code Playgroud)

然而,这是输出

2005-10-31    172.4
2005-11-30     69.3
2005-12-31    187.6
2006-01-31    126.4
2006-02-28    187.0
2006-03-31    108.3
...
2014-01-31     94.6
2014-02-28     82.3
2014-03-31    130.1
2014-04-30     59.2
2014-05-31     55.6
2014-06-30      1.2
Run Code Online (Sandbox Code Playgroud)

这是该系列每个月的平均值列表.这不是我想要的.我想要12个值,一年中每个月都有一个,这些年来每个月都有一个平均值.我该怎么做multiMmean

我已经尝试使用resample("M",how='mean')multiMmean和列表理解,但我不能得到它的工作.我错过了什么?

谢谢.

python time-series pandas

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

在所有子图中使用列绘制DataFrame

考虑一下我有一个包含3列的pandas DataFrame.我想将这些列中的两个作为单独的子图绘制,另一个列应该出现在其他两个子图上.

为了更好地解释,请考虑这个例子

x = np.linspace(0,10,5)
y1 = 2*x
y2 = 3*x
y3 = 4*x

df = pd.DataFrame(index=x, data=zip(*[y1,y2,y3]))
df.plot(subplots=True, layout=(1,3), ylim=[0,40])
Run Code Online (Sandbox Code Playgroud)

此代码显示 在此输入图像描述

哪个接近我想要的.但不完全是.我希望那个情节只有两个子图.一个是列0和1,另一个是列0和2.将每列与另一列进行比较.我得到的最接近的是

df[[1,2]].plot(subplots=True, layout=(1,2), ylim=[0,40])
plt.plot(df.index, df[0], label=0)
Run Code Online (Sandbox Code Playgroud)

这给了我这张图片,其中第0列只出现在第二个子图中,而不是全部出现在第二个子图中:

在此输入图像描述

有没有办法做到这一点?最好不要完全在熊猫之外.我知道我可以遍历第1列和第2列并使用pyplot和第0列手动绘制它们,但这只是代码太多而且我想避免这种情况,如果可能的话.

python plot matplotlib pandas

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

Pandas相当于整数索引的重采样

我正在寻找一个等效resample于数据帧的方法的熊猫,它不是一个DatetimeIndex整数数组,甚至可能是浮点数.

我知道,对于某些情况(例如,这个),重新采样方法可以通过reindex和插值轻松替换,但在某些情况下(我认为)它不能.

例如,如果我有

df = pd.DataFrame(np.random.randn(10,2))
withdates = df.set_index(pd.date_range('2012-01-01', periods=10))
withdates.resample('5D', np.std)
Run Code Online (Sandbox Code Playgroud)

这给了我

                   0         1
2012-01-01  1.184582  0.492113
2012-01-06  0.533134  0.982562
Run Code Online (Sandbox Code Playgroud)

但我不能用df和重新取样产生相同的结果.所以我正在寻找可以起作用的东西

 df.resample(5, np.std)
Run Code Online (Sandbox Code Playgroud)

这会给我

          0         1
0  1.184582  0.492113
5  0.533134  0.982562
Run Code Online (Sandbox Code Playgroud)

这种方法存在吗?我能够创建这种方法的唯一方法是手动分离df成较小的数据帧,np.std然后应用然后将所有内容连接起来,我觉得这很慢,而且根本不聪明.

干杯

python resampling pandas

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

datetime strptime - 设置格式以忽略字符串的尾随部分

我有一个可变长度的字符串,我想给出一个格式strptime,以便忽略其余的字符串.让我举例说明.我有类似的东西

9/4/2013,00:00:00,7.8,7.4,9.53
10/4/2013,00:00:00,8.64,7.4,9.53
Run Code Online (Sandbox Code Playgroud)

我想要一种使命令strptime(line,format)工作的格式来读取这些行.有点像format='%d/%m/%Y,%H:%M:%S*',虽然我知道这不起作用.我想我的问题有点类似于这个,但没有答案可以帮助我,我的问题有点糟糕,因为我的字符串的全长可能会有所不同.我有一种感觉dateutil可以解决我的问题,但我找不到那些可以解决问题的东西.

我可能会做类似的事情strptime(''.join(line.split(',')[:2]),format),但我不想诉诸于用户相关的问题.

python string datetime parsing trailing

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

pyplot轴中的日期时间格式

我试图datetime用pyplot对x轴上的对象列表绘制一些数据.但是日期显示为标准格式,%Y-%m-%d %H:%M:%S(太长).我可以通过创建日期字符串列表来避免这种情况,strftime并使用它来代替.我也知道有一些date内在的对象pyplot我可以使用而不是datetime.

有没有办法告诉pyplot以哪种格式绘制datetime对象?无需将所有内容转换为字符串或其他类型的对象?

谢谢.

python datetime matplotlib

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

对于分段函数,一次执行多次curve_fit迭代

我正在尝试同时执行Scipy的多次迭代,curve_fit以避免循环,从而提高速度.

这与这个问题非常相似,已经解决了.然而,功能是分段(不连续)的事实使得该解决方案不适用于此.

考虑这个例子:

import numpy as np
from numpy import random as rng
from scipy.optimize import curve_fit
rng.seed(0)
N=20
X=np.logspace(-1,1,N)
Y = np.zeros((4, N))
for i in range(0,4):
    b = i+1
    a = b
    print(a,b)
    Y[i] = (X/b)**(-a) #+ 0.01 * rng.randn(6)
    Y[i, X>b] = 1
Run Code Online (Sandbox Code Playgroud)

这产生了这些数组:

在此输入图像描述

你可以看到哪些是不连续的X==b.我可以通过迭代检索原始值ab使用curve_fit:

def plaw(r, a, b):
    """ Theoretical power law for the shape of the normalized conditional density """
    import numpy as …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy

6
推荐指数
1
解决办法
995
查看次数

如何使用 Pandas 完全忽略 csv 中的空格

我正在尝试以人类可读且易于 pandas 读取的格式制作 .csv 文件。这意味着列应该整齐地分开,以便您可以轻松识别每个值属于哪一列。问题是,用空格填充它会削弱 pandas 的功能。到目前为止我所得到的是

work    ,roughness  ,unstab ,corr_c_w   ,u_star ,c_star
us      ,True       ,True   ,-0.39      ,0.35   ,-.99
wang    ,False      ,       ,-0.5       ,       ,
cheng   ,           ,True   ,           ,       ,
watanabe,           ,       ,           ,0.15   ,-.80
Run Code Online (Sandbox Code Playgroud)

如果我取出上面 .csv 上的所有空格并直接读取它,pd.read_csv效果会非常好。前两列是布尔值,其他列是浮点数。然而,如果没有空格,它根本不可读。当我阅读上面的 .csv 时

pd.read_csv('bibrev.csv', index_col=0)
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为所有列和考虑的字符串显然都包含空格。当我使用

pd.read_csv('bibrev.csv', index_col=0, skipinitialspace=True)
Run Code Online (Sandbox Code Playgroud)

那么它就起作用了,因为浮点数被读取为浮点数,缺失值被读取为NaNs,这是一个很大的改进。但是,列名和布尔列仍然是带有空格的字符串。

有什么方法可以直接用 pandas 读取 .csv 吗?或者也许稍微尝试一下 csv 格式,但仍然可以清晰地读取人类可读的 .csv?

PS:我试图避免用 python 作为字符串读取所有内容,替换空格,然后将其提供给 pandas,并试图避免定义一些函数并通过关键字将其传递给 pandas converters

python csv pandas

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

什么是distutils相当于setuptools的`find_packages`?(蟒蛇)

我有一个setup.py文件检查用户是否有setuptools,如果他没有,那么我被迫使用distutils.问题是,为了确保安装子模块,我使用setuptools'find package:

from setuptools import setup, find_packages
packages = find_packages()
Run Code Online (Sandbox Code Playgroud)

然后从那里开始

但是,我不知道该如何做到这一点distutils.是否有相同的功能或者我是否必须手动查找具有__init__.py内部的子目录?如果是这样的话,我是否可以要求setuptools安装我的包裹而忘记distutils

干杯.

python install distutils setuptools setup.py

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

获取所有属性出现在python的`__dict__`方法上

请考虑以下python示例:

In [3]: class test(object):
   ...:     attribute='3'
   ...:     def __init__(self):
   ...:         self.other='4'
   ...:         

In [4]: b=test()

In [5]: b.attribute
Out[5]: '3'

In [6]: b.__dict__
Out[6]: {'other': '4'}
Run Code Online (Sandbox Code Playgroud)

为什么__dict__只显示"other"属性而不显示"atribute"

以及如何获得包含所有类的属性和值的字典?也就是说,我如何得到这个?

{'other': '4', 'attribute': '3'}
Run Code Online (Sandbox Code Playgroud)

我的意思是使用__dict__或其他一些简单的方法。

PS:与这个问题有关,但不能从那里得到一个字典。

PS2:我不是在寻找test.__dict__or b.__class__.__dict__,我在寻找可以用作的东西

In [3]: class test(object):
   ...:     attribute='3'
   ...:     def __init__(self):
   ...:         self.other='4'
   ...:     def _print_atr(self):
   ...:         # This should print exactly {'other': '4', 'attribute': '3'}
   ...:         print(self.__all_atr__)

In [4]: b=test()

In …
Run Code Online (Sandbox Code Playgroud)

python attributes class

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

Shell 通配符不适用于 Julia 的 Shell 模式

运行 IPython 时,我可以运行任何前面带有感叹号的 shell 命令:

In [1]: !ls
file1  file2  file3  file4

In [2]: !ls file*
file1  file2  file3  file4
Run Code Online (Sandbox Code Playgroud)

但是,某些事情(特别是使用 if 通配符)在 shell 模式下(在您输入分号之后)在 Julia REPL 上不起作用:

shell> ls file
file1 file4  file2  file3
shell> ls file*
ls: cannot access 'file*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?有没有办法让通配符像在 Linux shell 中一样正常运行?

shell julia

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