Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 使用pandas将月度数据表转换为季节性时间序列_Python_Pandas - Fatal编程技术网

Python 使用pandas将月度数据表转换为季节性时间序列

Python 使用pandas将月度数据表转换为季节性时间序列,python,pandas,Python,Pandas,我有一些表格格式的数据,行是年,列是月。我想将其转换为熊猫的时间序列格式,然后按季节平均值对数据进行分组(我特别想将冬季定义为11月至3月,并放弃所有其他内容)。下面是我的代码,它将数据读入表格格式,这样您就可以看到发生了什么: 将熊猫作为pd导入 页眉=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'] df=pd.read\u csv('https://www.esrl.noaa.gov/psd/gcos_wgsp

我有一些表格格式的数据,行是年,列是月。我想将其转换为熊猫的时间序列格式,然后按季节平均值对数据进行分组(我特别想将冬季定义为11月至3月,并放弃所有其他内容)。下面是我的代码,它将数据读入表格格式,这样您就可以看到发生了什么:

将熊猫作为pd导入
页眉=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月']
df=pd.read\u csv('https://www.esrl.noaa.gov/psd/gcos_wgsp/Timeseries/Data/nino34.long.anom.data',
分隔符='\s+',标头=0,名称=标头,skiprows=1,索引列=0)
df=df.drop(df.tail(7.index))
df
我要得到的结果是每个冬季11月至3月的平均值的时间序列(例如,2018年11月、2018年12月、2019年1月、2019年2月和2019年3月的平均值)。我猜这个过程包括首先将这些数据排序成一个时间序列(我不确定如何做),然后按季节分组(11月至3月),然后删除其他月份

给出如图所示的数据
  • 年份是指数
  • 查看以指定窗口
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
#重置索引
df.reset_索引(原地=真)
#将列重命名为year
rename(列={'index':'year'},inplace=True)
#将df转换为长格式
df2=df.melt(id_vars='year',var_name='month')
#创建datatime列并将其设置为索引
df2['date']=pd.to_datetime(df2['year'].astype(str)+'-'+df2['month']))
df2.set_索引('date',inplace=True)
#定义冬季数据帧
冬季=df2[df2['month'].isin(['Nov','Dec','Jan','Feb','Mar'])。复制()
#对索引排序
winter.sort_索引(就地=真)
冬季数据帧
年-月值
日期
1871-01-01 1871年1月-0.25日
1871-02-01 1871年2月-0.58
1871-03-01 1871年3月-0.43
1871-11-01 1871年11月-0.31日
1871-12-01 1871年12月-0.58日
1872-01-01 1872年1月-0.72
1872-02-01 1872年2月-0.62
1872-03-01 1872年3月-0.50
1872-11-01 1872年11月-0.79
1872-12-01 1872年12月-0.88
1873-01-01 1873年1月-0.78
1873-02-01 1873年2月1日
1873-03-01 1873年3月1日至31日
1873-11-01 1873年11月-0.77
1873-12-01 1873年12月-0.70
1874-01-01 1874年1月-0.93
1874-02-01 1874年2月-2006年1月
1874-03-01 1874年3月1日下午1时40分
1874-11-01 1874年11月1日-33日
1874-12-01 1874年12月14日
1875-01-01 1875年1月-0.71
1875-02-01 1875年2月-0.37
1875-03-01 1875年3月-0.59
1875-11-01 1875年11月-0.64
1875-12-01 1875年12月-0.75日
1876-01-01 1876年1月-0.95
1876-02-01 1876年2月1日-20日
1876-03-01 1876年3月1日至13日
1876-11-01 1876年11月0日15
1876-12-01 1876年12月23日
1877-01-01 1877年1月0日35
1877-02-01 1877年2月0日46
1877-03-01 1877年3月0.52日
1877-11-01 1877年11月2日08
1877-12-01 1877年12月2日49
1878-01-01 1878年1月2日41
1878-02-01 1878年2月2日43
1878-03-01 1878年3月1日31
1878-11-01 1878年11月-0.70
1878-12-01 1878年12月-0.75日
1879-01-01 1879年1月-0.55
1879-02-01 1879年2月-0.18日
1879-03-01 1879年3月-0.24日
1879-11-01 1879年11月1日至14日
1879-12-01 1879年12月1日
1880-01-01 1880年1月-1日
1880-02-01 1880年2月-0.73
1880-03-01 1880年3月-0.62
1880-11-01 1880年11月24日
1880-12-01 1880年12月18日
1881-01-01 1881年1月0日29
1881-02-01 1881年2月0日23
1881-03-01 1881年3月0日32
1881-11-01 1881年11月-0.59
1881-12-01 1881年12月-0.37日
1882-01-01 1882年1月-0.45
1882-02-01 1882年2月-0.55
1882-03-01 1882年3月-0.53
1882-11-01 1882年11月-0.92
1882-12-01 1882年12月-0.75日
  • 在这个例子中,1870年和1882年的冬天是不完整的,分别由3个月和2个月组成。
    • 这5个日期将被删除
  • 计算每个季节的平均值
#在冬季数据帧的开始和结束时删除不完整的季节
冬季降落([pd.时间戳('1871-01-01'),
pd.时间戳('1871-02-01'),
pd.时间戳('1871-03-01'),
pd.时间戳('1882-11-01'),
pd.时间戳('1882-12-01')],就地=真)
#每5行计算一个季节的平均值
年平均值=winter.groupby(winter.reset_index().index//5)[value'].mean()
#为季节开始数据创建标签
冬季=局部放电日期范围(开始时间=1871-11-01',周期=11,频率=12毫秒)
#创建冬季平均数据帧
winter_avg=pd.DataFrame({'winter_start':winter_year,'season_avg':yearly_avg})
冬季平均设置指数(“冬季开始”,就地=真)
季节平均值
冬季开始
1871-11-01        -0.546
1872-11-01        -0.954
1873-11-01        -0.972
1874-11-01        -0.828
1875-11-01        -0.934
1876-11-01         0.342
1877-11-01         2.144
1878-11-01        -0.484
1879-11-01        -0.902
1880-11-01         0.252
1881-11-01        -0.498
绘制数据:
#防止未来的警告
从pandas.plotting导入寄存器\u matplotlib\u转换器
寄存器_matplotlib_转换器()
sns.lineplot(winter.index,winter['value'],label='all values')
sns.散点图(冬季平均指数,冬季平均['season\u avg'],标签='season avg',颜色='orange')
plt.ylabel('值')
plt.xlabel(年份)
plt.show()

您也可以通过以下方法实现

months=['一月'、'二月'、'三月'、'四月'、'五月'、'六月'、'七月'、'八月'、'九月'、'十月'、'十一月'、'十二月']
季节='11月至3月'。分割('-')
开始=月份。索引(季节[0])
结束=月份。指数(季节[1])
季节月份1=[]
季节月份2=[]
如果结束>=开始:
季节\月1=月[开始:结束+1]
df['result']=df[季节/月1]。平均值(轴=1)
如果结束<开始:
季节\月1=月[开始:12]
季节\月2=月[0:结束+1]
df2=df[季节/月份2+[年份]]
df2[“年”]=df2[“年”]+1
df3=df2.merge(df[季月1+['年']),how='lef
         Jan     Feb     Mar     Apr     May     Jun     Jul     Aug     Sep     Oct     Nov     Dec
1871    -0.25   -0.58   -0.43   -0.50   -0.70   -0.53   -0.60   -0.33   -0.24   -0.33   -0.31   -0.58
1872    -0.72   -0.62   -0.50   -0.77   -0.62   -0.52   -0.32   -0.85   -1.02   -0.94   -0.79   -0.88
1873    -0.78   -1.01   -1.31   -0.67   -0.53   -0.48   -0.58   -0.39   -0.34   -0.78   -0.77   -0.70
1874    -0.93   -1.06   -1.40   -0.94   -0.86   -0.72   -1.00   -1.05   -1.13   -1.25   -1.33   -1.14
1875    -0.71   -0.37   -0.59   -0.87   -1.09   -0.76   -0.85   -0.81   -0.91   -0.83   -0.64   -0.75
1876    -0.95   -1.20   -1.13   -1.18   -1.08   -0.43   -0.34   -0.16   -0.02   0.11    0.15    0.23
1877    0.35    0.46    0.52    0.50    0.76    0.98    1.42    1.54    1.75    1.95    2.08    2.49
1878    2.41    2.43    1.31    0.92    0.82    0.92    0.25    -0.11   -0.32   -0.53   -0.70   -0.75
1879    -0.55   -0.18   -0.24   -0.37   -0.83   -0.67   -0.77   -0.69   -0.83   -0.93   -1.14   -1.02
1880    -1.00   -0.73   -0.62   -0.57   -0.71   -0.61   -0.53   -0.24   -0.03   0.17    0.24    0.18
1881    0.29    0.23    0.32    0.41    0.16    0.23    -0.26   -0.17   -0.33   -0.43   -0.59   -0.37
1882    -0.45   -0.55   -0.53   0.10    0.01    -0.40   -0.57   -0.33   -0.51   -0.65   -0.92   -0.75
    Year    Jan     Feb     Mar     Apr     May     Jun     Jul     Aug     Sep     Oct     Nov     Dec     result
0   1871    -0.25   -0.58   -0.43   -0.50   -0.70   -0.53   -0.60   -0.33   -0.24   -0.33   -0.31   -0.58   NaN
1   1872    -0.72   -0.62   -0.50   -0.77   -0.62   -0.52   -0.32   -0.85   -1.02   -0.94   -0.79   -0.88   311.511667
2   1873    -0.78   -1.01   -1.31   -0.67   -0.53   -0.48   -0.58   -0.39   -0.34   -0.78   -0.77   -0.70   311.615000
3   1874    -0.93   -1.06   -1.40   -0.94   -0.86   -0.72   -1.00   -1.05   -1.13   -1.25   -1.33   -1.14   311.405000
4   1875    -0.71   -0.37   -0.59   -0.87   -1.09   -0.76   -0.85   -0.81   -0.91   -0.83   -0.64   -0.75   311.703333
5   1876    -0.95   -1.20   -1.13   -1.18   -1.08   -0.43   -0.34   -0.16   -0.02   0.11    0.15    0.23    312.451667
6   1877    0.35    0.46    0.52    0.50    0.76    0.98    1.42    1.54    1.75    1.95    2.08    2.49    313.048333
7   1878    2.41    2.43    1.31    0.92    0.82    0.92    0.25    -0.11   -0.32   -0.53   -0.70   -0.75   312.980000
8   1879    -0.55   -0.18   -0.24   -0.37   -0.83   -0.67   -0.77   -0.69   -0.83   -0.93   -1.14   -1.02   313.831667
9   1880    -1.00   -0.73   -0.62   -0.57   -0.71   -0.61   -0.53   -0.24   -0.03   0.17    0.24    0.18    313.241667
10  1881    0.29    0.23    0.32    0.41    0.16    0.23    -0.26   -0.17   -0.33   -0.43   -0.59   -0.37   312.948333
11  1882    -0.45   -0.55   -0.53   0.10    0.01    -0.40   -0.57   -0.33   -0.51   -0.65   -0.92   -0.75   313.528333