我有一系列的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和列表理解,但我不能得到它的工作.我错过了什么?
谢谢.
考虑一下我有一个包含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列手动绘制它们,但这只是代码太多而且我想避免这种情况,如果可能的话.
我正在寻找一个等效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然后应用然后将所有内容连接起来,我觉得这很慢,而且根本不聪明.
干杯
我有一个可变长度的字符串,我想给出一个格式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),但我不想诉诸于用户相关的问题.
我试图datetime用pyplot对x轴上的对象列表绘制一些数据.但是日期显示为标准格式,%Y-%m-%d %H:%M:%S(太长).我可以通过创建日期字符串列表来避免这种情况,strftime并使用它来代替.我也知道有一些date内在的对象pyplot我可以使用而不是datetime.
有没有办法告诉pyplot以哪种格式绘制datetime对象?无需将所有内容转换为字符串或其他类型的对象?
谢谢.
我正在尝试同时执行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.我可以通过迭代检索原始值a并b使用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) 我正在尝试以人类可读且易于 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。
我有一个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示例:
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) 运行 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 中一样正常运行?
python ×9
pandas ×4
datetime ×2
matplotlib ×2
attributes ×1
class ×1
csv ×1
distutils ×1
install ×1
julia ×1
numpy ×1
parsing ×1
plot ×1
resampling ×1
scipy ×1
setup.py ×1
setuptools ×1
shell ×1
string ×1
time-series ×1
trailing ×1