将每月数据库中获得的每日平均值保存为csv格式文件

时间:2013-10-09 23:59:20

标签: python date datetime pandas

我有一个文件' tancoyol.csv'含有Fecha,Temperatura,Humedad,PreciAcu数据每15分钟记录一次。它具有以下形式:

Fecha DirViento MagViento Temperatura HUmedad PreciAcu
                                                                                          2011-07-01 00:00:00 318 6.6 21.22 100 1.7
2011-07-01 00:15:00 342 5.5 21.20 100 1.7
2011-07-01 00:30:00 329 6.6 21.15 100 4.8
2011-07-01 00:45:00 279 7.5 21.11 100 4.2
2011-07-01 01:00:00 318 6.0 21.16 100 2.5
2011-07-01 01:15:00 329 7.1 21.13 100 4.0
2011-07-01 01:30:00 300 4.7 21.15 100 1.3
2011-07-01 01:45:00 291 3.1 21.23 100 2.2
2011-07-01 02:00:00 284 7.6 21.29 100 1.3
2011-07-01 02:15:00 315 0.0 21.43 100 1.0
2011-07-01 02:30:00 281 3.6 21.47 100 3.2
2011-07-01 02:45:00 0 2.7 21.52 100 2.5
2011-07-01 03:00:00 57 1.2 21.53 100 0.0
2011-07-01 03:15:00 300 3.4 21.69 100 0.0
2011-07-01 03:30:00 359 5.9 21.67 100 0.0
2011-07-01 03:45:00 309 1.8 21.65 100 0.0
2011-07-01 04:00:00 244 13.4 21.64 100 0.0
2011-07-02 00:00:00 312 6.0 23.05 97 0.0
2011-07-02 00:15:00 318 6.3 22.79 100 0.3
2011-07-02 00:30:00 303 9.1 22.44 100 0.7
2011-07-02 00:45:00 323 6.3 22.40 100 0.3
2011-07-02 01:00:00 319 5.4 22.07 100 0.7
2011-07-02 01:15:00 4 3.9 21.89 100 0.8
2011-07-02 01:30:00 6 4.5 21.74 100 0.7
2011-07-02 01:45:00 310 5.0 21.72 100 1.3
2011-07-02 02:00:00 307 0.0 21.79 100 1.0
2011-07-02 02:15:00 5 3.4 21.78 100 1.2
2011-07-02 02:30:00 288 3.4 21.78 100 1.5
2011-07-02 02:45:00 0 2.6 21.66 100 1.5
2011-07-02 03:00:00 280 5.8 21.48 100 1.3
2011-07-02 03:15:00 29 0.0 21.43 100 1.5
2011-07-02 03:30:00 332 2.0 21.23 100 1.7
2011-07-02 03:45:00 148 0.0 21.06 100 1.5
2011-07-02 04:00:00 132 0.0 21.00 100 2.0
2011-07-03 00:00:00 308 8.0 21.93 99 0.3
2011-07-03 00:15:00 288 14.4 21.85 99 0.2
2011-07-03 00:30:00 354 3.1 21.85 99 0.3
2011-07-03 00:45:00 335 5.8 21.75 100 0.2
2011-07-03 01:00:00 274 2.7 21.68 100 0.0
2011-07-03 01:15:00 328 5.6 21.55 100 0.3
2011-07-03 01:30:00 319 7.9 21.38 100 0.2
2011-07-03 01:45:00 322 5.1 21.32 100 0.3
2011-07-03 02:00:00 317 2.8 21.21 100 0.2
2011-07-03 02:15:00 322 5.3 21.08 100 0.3
2011-07-03 02:30:00 291 4.3 21.06 100 0.2
2011-07-03 02:45:00 284 5.7 21.04 100 0.3
2011-07-03 03:00:00 310 2.7 21.05 100 0.2
2011-07-03 03:15:00 318 4.6 21.06 100 0.3
2011-07-03 03:30:00 299 7.4 21.05 100 0.2
2011-07-03 03:45:00 238 0.0 20.99 100 0.3
2011-07-03 04:00:00 310 1.4 21.05 100 0.2

我想要做的第一件事是获得DirViento,MagViento,Temperatura和Humedad的平均列数。我这样做如下:

import pandas as pd import numpy as np

df = pd.read_csv('tancoyol.csv', parse_dates=[['Fecha','Hora']]) df1=df.set_index('Fecha_Hora') prom_diario=df1.resample('D',how=np.mean) print prom_diario

Fecha DirViento MagViento Temperatura Humedad PreciAcu

2011-07-01 318.000000 6.600000 21.220000 100.000000 1.700000
2011-07-02 273.470588 5.064706 21.474706 99.823529 1.688235
2011-07-03 200.705882 3.864706 21.775882 99.941176 1.076471
2011-07-04 306.812500 4.925000 21.310625 99.875000 0.231250

因为平均值没有在第1,2和3天完成,因为输出滞后,即第2天的平均值应该对应于第一天,依此类推。如何解决这个问题? 现在,我想获得PreciAcu专栏的每日总和,而不是获得PreciAcu专栏的平均值,我该怎么做? 最后,如何将输出(平均值和总和)存储到csv文件

非常感谢你的帮助

2 个答案:

答案 0 :(得分:0)

要对一列进行求和并对其他列求平均值,请传递列名称和函数的字典。

In [47]: df.resample('D', {'DirViento': np.mean, 'MagViento': np.mean, 'Temperatura': np.mean, 'HUmedad': np.mean, 'PreciAcu': np.sum})
Out[47]: 
            PreciAcu  Temperatura     HUmedad   DirViento  MagViento
 0_1                                                                 
2011-07-01      30.4    21.367059  100.000000  273.823529   5.100000
2011-07-02      18.0    21.841765   99.823529  200.941176   3.747059
2011-07-03       4.0    21.347059   99.823529  306.882353   5.105882

我没有按照你的推理为什么输出滞后,但你可以这样做:

In [53]: resampled = df.resample('D', {'DirViento': np.mean, 'MagViento': np.mean, 'Temperatura': np.mean, 'HUmedad': np.mean, 'PreciAcu': np.sum})

In [54]: resampled.tshift(-1)
Out[54]: 
            PreciAcu  Temperatura     HUmedad   DirViento  MagViento
0_1                                                                 
2011-06-30      30.4    21.367059  100.000000  273.823529   5.100000
2011-07-01      18.0    21.841765   99.823529  200.941176   3.747059
2011-07-02       4.0    21.347059   99.823529  306.882353   5.105882

将其保存为CSV非常简单:df1.to_csv('filename.csv')

答案 1 :(得分:0)

我认为您正在寻找closed='right'的{​​{1}}和label='right'个参数:

resample

当然,正如@Dan Allan所说,使用In [38]: hows = {'PreciAcu': 'sum'} In [39]: func_keys = df.columns - Index(hows.keys()) In [40]: mean_funcs = zip(func_keys, ['mean'] * len(func_keys)) In [41]: hows.update(mean_funcs) In [42]: hows Out[42]: {'DirViento': 'mean', 'HUmedad': 'mean', 'MagViento': 'mean', 'PreciAcu': 'sum', 'Temperatura': 'mean'} In [48]: df.resample('D', how=hows, closed='right', label='right') Out[48]: PreciAcu HUmedad Temperatura DirViento MagViento ts 2011-07-01 1.7 100.000 21.220 318.000 6.600 2011-07-02 28.7 99.824 21.475 273.471 5.065 2011-07-03 18.3 99.941 21.776 200.706 3.865 2011-07-04 3.7 99.875 21.311 306.812 4.925 将新重新采样的to_csv写入文件。

相关问题