Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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 大熊猫日均_Python_Pandas - Fatal编程技术网

Python 大熊猫日均

Python 大熊猫日均,python,pandas,Python,Pandas,我在获取熊猫数据库中的每日平均值时遇到问题。我在这里查过了,没用。csv文件如下所示: Date/Time,Value 12/08/13 12:00:01,5.553 12/08/13 12:30:01,2.604 12/08/13 13:00:01,2.604 12/08/13 13:30:01,2.604 12/08/13 14:00:01,2.101 12/08/13 14:30:01,2.666 # Import iButton temperatures flistloc = '../

我在获取熊猫数据库中的每日平均值时遇到问题。我在这里查过了,没用。csv文件如下所示:

Date/Time,Value
12/08/13 12:00:01,5.553
12/08/13 12:30:01,2.604
12/08/13 13:00:01,2.604
12/08/13 13:30:01,2.604
12/08/13 14:00:01,2.101
12/08/13 14:30:01,2.666
# Import iButton temperatures
flistloc = '../data/iButtons/Readings/edit'
flist = os.listdir(flistloc)
# Create empty dictionary to store db for each file
pdib = {}
for file in flist:
    file = os.path.join(flistloc,file)
    # Calls function to return only name
    fname,_,_,_= namer(file)
    # Read each file to db
    pdib[fname] = pd.read_csv(file, parse_dates=0, dayfirst=True, index_col=0)
pdibkeys = sorted(pdib.keys())
#
# Calculate daily average for each iButton
for name in pdibkeys:
    pdib[name]['daily'] = pdib[name].resample('D', how = 'mean')```
等等。我的代码如下所示:

Date/Time,Value
12/08/13 12:00:01,5.553
12/08/13 12:30:01,2.604
12/08/13 13:00:01,2.604
12/08/13 13:30:01,2.604
12/08/13 14:00:01,2.101
12/08/13 14:30:01,2.666
# Import iButton temperatures
flistloc = '../data/iButtons/Readings/edit'
flist = os.listdir(flistloc)
# Create empty dictionary to store db for each file
pdib = {}
for file in flist:
    file = os.path.join(flistloc,file)
    # Calls function to return only name
    fname,_,_,_= namer(file)
    # Read each file to db
    pdib[fname] = pd.read_csv(file, parse_dates=0, dayfirst=True, index_col=0)
pdibkeys = sorted(pdib.keys())
#
# Calculate daily average for each iButton
for name in pdibkeys:
    pdib[name]['daily'] = pdib[name].resample('D', how = 'mean')```
数据库似乎正常,但平均值不起作用。以下是一个人在iPython中的样子:

'2B5DE4': <class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1601 entries, 2013-08-12 12:00:01 to 2013-09-14 20:00:01
Data columns (total 2 columns):
Value    1601  non-null values
daily    0  non-null values
dtypes: float64(2)}
2B5DE4':
DatetimeIndex:1601条记录,2013-08-12 12:00:01至2013-09-14 20:00:01
数据列(共2列):
值1601非空值
每日0个非空值
数据类型:float64(2)}

有人知道发生了什么吗?

当您在1列数据帧上调用
重采样时,输出将是一个1列数据帧,具有不同的索引--每个日期都作为自己的索引项。因此,当您尝试将其分配给原始数据帧中的一列时,我不知道您希望发生什么

三种可能的方法(其中,
df
是原始数据帧):

  • 您真的需要原始数据帧中的平均值吗?如果没有:

    davg=df.resample('D',how='mean')

  • 如果这样做,另一种解决方案是在确保两个数据帧都有一列(而不是索引)和日期后,合并日期上的两个数据帧

  • def compute_avg_val(df):
        df['daily average'] = df['Value'].mean()
        return df
    df['day'] = df.index.apply(lambda x: x.date())
    grouped = df.groupby('day')
    df = grouped.apply(compute_avg_val)
    
    "

  • 2的另一种选择(没有关于是否更快的直觉)是简单地
    groupby
    日期

    def compute_avg_val(df):
        df['daily average'] = df['Value'].mean()
        return df
    df['day'] = df.index.apply(lambda x: x.date())
    grouped = df.groupby('day')
    df = grouped.apply(compute_avg_val)
    

  • 您不能以较低的频率重新采样,然后将重新采样的
    数据帧
    系列
    分配回重新采样的数据帧,因为索引不匹配:

    In [49]: df = pd.read_csv(StringIO("""Date/Time,Value
    12/08/13 12:00:01,5.553
    12/08/13 12:30:01,2.604
    12/08/13 13:00:01,2.604
    12/08/13 13:30:01,2.604
    12/08/13 14:00:01,2.101
    12/08/13 14:30:01,2.666"""), parse_dates=0, dayfirst=True, index_col=0)
    
    In [50]: df.resample('D')
    Out[50]:
                Value
    Date/Time
    2013-08-12  3.022
    
    [1 rows x 1 columns]
    
    In [51]: df['daily'] = df.resample('D')
    
    In [52]: df
    Out[52]:
                         Value  daily
    Date/Time
    2013-08-12 12:00:01  5.553    NaN
    2013-08-12 12:30:01  2.604    NaN
    2013-08-12 13:00:01  2.604    NaN
    2013-08-12 13:30:01  2.604    NaN
    2013-08-12 14:00:01  2.101    NaN
    2013-08-12 14:30:01  2.666    NaN
    
    [6 rows x 2 columns]
    
    一个选项是利用行上的部分时间索引:

    davg = df.resample('D', how='mean')
    df.loc[str(davg.index.date[0]), 'daily'] = davg.values
    
    如下所示,当您展开
    str(davg.index.date[0])
    行时:

    df.loc['2013-08-12', 'daily'] = davg.values
    

    这是一个小技巧,可能有更好的方法。这个问题有点老了,但我还是想有所贡献,因为我不得不一次又一次地处理这个问题(我认为这不是真正的pythonic…)

    到目前为止,我提出的最佳解决方案是使用原始索引创建一个新的数据帧,其中大部分是NA,并在最后填充它

    davg = df.resample('D', how='mean')
    davg_NA = davg.loc[df.index]
    davg_daily = davg_NA.fillna(method='ffill')
    
    你甚至可以把它挤成一行

    df.resample('D', how='mean').loc[df.index].fillna(method='ffill')
    

    这是一个比我更彻底的答案,做得很好。我想知道@mercergeoinfo是否真的想要原始数据帧中的日平均值,如果是,原因是什么。另外,一种不太老练的方法可能是将两个数据帧合并在一起。类似于(1)
    df['day']=df.index.apply(lambda x:x.date())
    (2)
    davg.reset\u index('date/Time',inplace=True)
    和(3)
    pd.merge(df,davg,left\u on='day',right\u on='date/Time')
    不错,你应该把它放在你的答案中!啊!!我总是忘记它们不仅仅是字典。我想把一切都安排在一起。为什么?谁知道呢?答案似乎是合理的,而且很容易解决,但我确实有一个关于这个“限制”的问题:似乎你可以给熊猫数据库分配一个值,它只是在每个索引上重复。这很好(这也是我假设在同一分贝中求平均值可行的原因),但似乎不一致。你知道为什么pdib['elevation']=1140
    会起作用吗?不是很重要,但很奇怪。FutureWarning:how in.resample()不受欢迎//新语法是.resample(…).mean()