簡體   English   中英

如何獲得python的每日平均值?

[英]How could I get a daily average in python?

我有一個格式如下的文件:

(年-月-日-數據)

1980-1-1-1.2
1980-1-2-1.3
1980-1-3-1.4
1980-1-4-1.5
1980-1-5-1.6
1980-1-6-1.7
1980-1-7-1.8

它在一個numpy數組中。 它是大約24年間的數據,所以我想做的是每天取平均值,並將其放入一個單獨的1D數組中,該數組只是366(leap年)平均值,我可以然后使用matplotlib進行繪圖,並可以查看多年來的趨勢。 如果仍然在循環中使用子集,那么我可以做到這一點嗎?

使用熊貓絕對是必經之路。 至少有兩種方式可以對“一年中的某天”進行分組,您可以將年份中的數字天作為字符串或字符串monthday組合來進行,如下所示:

import pandas as pd
import numpy as np

df = pd.DataFrame(index=pd.date_range('2000-01-01', '2010-12-31'))

df['vals'] = np.random.randint(1, 6, df.shape[0])

print(df.groupby(df.index.strftime("%j")).mean())
print(df.groupby(df.index.strftime("%m%d")).mean())

對於任何想解決此問題的人,這里都有一些代碼。

從本質上講,代碼一次讀取輸入文件一行,挑選日期和值的元素,將它們重新組合成大熊貓可以輕松解析的行,並將其放入StringIO對象。

熊貓從那里讀取它們,就像從csv文件讀取一樣。 我已經從PiRSquared編寫了分組代碼

import pandas as pd
import re
from io import StringIO

file_name = 'temp.txt'

for_pd = StringIO()
with open(file_name) as f:
    for line in f:
        pieces = re.search(r'([0-9]{4}) - ([0-9]{,2}) - ([0-9]{,2}) - ([0-9.]+)', line).groups()
        pieces = [int(_) for _ in pieces[:3]] + [pieces[3]]
        print ('%.4i-%.2i-%.2i,%s' % tuple(pieces), file=for_pd)
for_pd.seek(0)

df = pd.read_csv(for_pd, header=None, names=['datetimes', 'values'], parse_dates=['datetimes'])

print (df.set_index('datetimes').groupby(pd.TimeGrouper('D')).mean().dropna())
print (df.set_index('datetimes').groupby(pd.TimeGrouper('W')).mean().dropna())

這是輸出。

            values
datetimes         
1980-01-01     1.2
1980-01-02     1.3
1980-01-03     1.4
1980-01-04     1.5
1980-01-05     1.6
1980-01-06     1.7
1980-01-07     1.8
            values
datetimes         
1980-01-06    1.45
1980-01-13    1.80

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM