Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 从系列构建新的数据帧_Python 2.7_Pandas - Fatal编程技术网

Python 2.7 从系列构建新的数据帧

Python 2.7 从系列构建新的数据帧,python-2.7,pandas,Python 2.7,Pandas,因为我仍然不知道如何正确地做我想做的事情,所以我再次尝试我的一个朋友 我将数据存储在数据帧中,需要提取数据的平均块以供以后使用。我的索引是datetime值,但这并不十分重要。不幸的是,我无法执行简单的df.resample()操作,因为我需要提取的数据间隔不规则。例如: import pandas as pd from numpy import * # Build example dataframe df = pd.DataFrame(data=random.rand(10,3),index

因为我仍然不知道如何正确地做我想做的事情,所以我再次尝试我的一个朋友

我将数据存储在数据帧中,需要提取数据的平均块以供以后使用。我的索引是datetime值,但这并不十分重要。不幸的是,我无法执行简单的df.resample()操作,因为我需要提取的数据间隔不规则。例如:

import pandas as pd
from numpy import *

# Build example dataframe
df = pd.DataFrame(data=random.rand(10,3),index=None,columns=list('ABC'))

# Build dummy dataframe to store averaged data from "df"
dummy = pd.DataFrame(columns=df.columns)

# Perform averaging of "df" 
for r in xrange(1,10,2):
    ave = df.ix[r-1:r+1].mean()

    # Store averaged data in dummy dataframe
    # Here is where I hit my problem, since ave is a Series
    dummy = dummy.append(ave)
我无法将序列附加到数据帧。
我可以通过将ave转换为字典,然后附加到dummy来解决这个问题:

for r in xrange(1,10,2):
    ave = df.ix[r-1:r+1].mean().to_dict()
    ave = pd.DataFrame(ave,index=[r])
    dummy = dummy.append(ave)
第一:我的总体目标有意义吗?
第二:有没有更好的方法来实现这一点?转换为字典,然后是数据帧,然后是追加似乎很困难,但这是我最好的

开始编辑 联合国大学提出了一个很好的观点。如前所述,滚动_mean()将起作用。但是,我只对很少几行数据感兴趣,其他的都被认为是垃圾

# Now creating larger dataframe for illustration
df = pd.DataFrame(data=random.rand(10000,3),index=None,columns=list('ABC'))

# Now, most of the data are not averaged
for r in xrange(1,10000,50):
    ave = df.ix[r-1:r+1].mean().to_dict()
    ave = pd.DataFrame(ave,index=[r])
我在示例中遇到的主要问题是显示平均值的不规则性。平均值是由事件驱动的(即,如果在2013-01-01 14:23发生了什么,则对2013-01-01 14:23+/-2.5分钟的数据进行平均

不幸的是,数据时间戳也是高度不规则的,这使得rolling_mean()在这种情况下无效。因此,我有不规则的事件来确定何时平均我不规则记录的数据,这是一个很好的问题

我可以实现我想要的,但只能通过将ave从series转换为dictionary,然后再转换为dataframe来实现。也许在这种情况下,“足够好”就不必说了

结束编辑
dummy=dummy.append(ave)

听起来你要找的是:

屈服

          A         B         C
2  0.301872  0.404214  0.163073
3  0.342470  0.303837  0.391442
4  0.309843  0.547624  0.369792
5  0.471245  0.571539  0.423766
6  0.338436  0.497841  0.462274
7  0.593039  0.309610  0.683919
8  0.661679  0.468711  0.526037
9  0.627902  0.459287  0.551836

这是另一种使用datelike索引的方法

In [67]: df = pd.DataFrame(data=np.random.rand(10,3), index=None, columns=list('ABC'))

In [68]: df
Out[68]: 
          A         B         C
0  0.417022  0.720324  0.000114
1  0.302333  0.146756  0.092339
2  0.186260  0.345561  0.396767
3  0.538817  0.419195  0.685220
4  0.204452  0.878117  0.027388
5  0.670468  0.417305  0.558690
6  0.140387  0.198101  0.800745
7  0.968262  0.313424  0.692323
8  0.876389  0.894607  0.085044
9  0.039055  0.169830  0.878143
这是一个常规索引,但在时间上是不规则的(或至少是假装的)

每3个数据(不管是不是他们的)都要认真对待(如果你想的话,你也可以做得更出色)。他们有更多的选择(例如,包括哪一面,标签放在哪里等,请参阅


不完全正确。正如我在示例中所写的,滚动平均值将起作用。但我不需要所有的数据。我将编辑我的帖子以显示一个示例。@ubuntu:是否希望
dummy=pd.rolling平均值(df,window=3).shift(-1).dropna()
使窗口集中在当前观察点而不是结束于当前观察点?或者,如果您愿意,您可以执行
dummy=pd.rolling\u mean(df,window=3,center=True)。dropna()
此外,根据设置,设置
min\u periods=3
以强制执行边缘案例可能很有用。
In [67]: df = pd.DataFrame(data=np.random.rand(10,3), index=None, columns=list('ABC'))

In [68]: df
Out[68]: 
          A         B         C
0  0.417022  0.720324  0.000114
1  0.302333  0.146756  0.092339
2  0.186260  0.345561  0.396767
3  0.538817  0.419195  0.685220
4  0.204452  0.878117  0.027388
5  0.670468  0.417305  0.558690
6  0.140387  0.198101  0.800745
7  0.968262  0.313424  0.692323
8  0.876389  0.894607  0.085044
9  0.039055  0.169830  0.878143
In [69]: df.index=date_range('20130101 09:00:58',periods=10,freq='s')

In [70]: df
Out[70]: 
                            A         B         C
2013-01-01 09:00:58  0.417022  0.720324  0.000114
2013-01-01 09:00:59  0.302333  0.146756  0.092339
2013-01-01 09:01:00  0.186260  0.345561  0.396767
2013-01-01 09:01:01  0.538817  0.419195  0.685220
2013-01-01 09:01:02  0.204452  0.878117  0.027388
2013-01-01 09:01:03  0.670468  0.417305  0.558690
2013-01-01 09:01:04  0.140387  0.198101  0.800745
2013-01-01 09:01:05  0.968262  0.313424  0.692323
2013-01-01 09:01:06  0.876389  0.894607  0.085044
2013-01-01 09:01:07  0.039055  0.169830  0.878143
In [71]: df.resample('3s',how=lambda x: x.mean())
Out[71]: 
                            A         B         C
2013-01-01 09:00:57  0.359677  0.433540  0.046226
2013-01-01 09:01:00  0.309843  0.547624  0.369792
2013-01-01 09:01:03  0.593039  0.309610  0.683919
2013-01-01 09:01:06  0.457722  0.532219  0.481593