学习过数据库系统原理的的小伙伴们应该对groupby函数有一定的了解,groupby根据指定的属性对数据进行分组聚合
类似SQL: select student,sum(grade) from stu_grade group by student
groupby 先对数据进行分组,之后在每个分组上使用聚合函数、转换函数
这次使用的数据依旧是前面操作使用过的天气csv文件,没有办法给宝子们粘贴了,宝子们可以自己创造一点数据进行操作练习。每天学习一点点,最后会有大收获。大家加油哦!
import pandas as pd
import datetime as dt
fpath="D:/weather_20230115134249.xls"
data=pd.read_csv(fpath)
print(data)
print('-'*80)
#取出20条数据
data1=data.head(20)
print(data1)
#根据索引的奇偶进行聚合
print('-'*80)
data_index=data1.groupby(data1.index%2==0)['气温(度)'].sum()
print(data_index)
print('-'*80)
#根据城市的第一个字聚合
data_city=data1.groupby(data1.城市.str[0])[['行政区','气温(度)']].sum()
print(data_city.head())
print('-'*80)
data_city1=data1.groupby(data1.城市.isin(['新北市','南投縣']))[['相对湿度(%)']].sum()
print(data_city1)
print('-'*80)
#使用agg函数
dict_data={'气温(度)':'max','相对湿度(%)':'count','累积雨量(mm)':'sum'}
data_agg=data1.groupby('城市').agg(dict_data)
print(data_agg)
print('-'*80)
#取出data的前120条数据
data2=pd.read_csv(fpath)
data3=data2.head(120)
print(data3)
print('-'*80)
data3['日期1']=pd.to_datetime(data3['日期'])
print(data3)
print('-'*80)
data3_month=data3.groupby([data3.日期1.dt.month])['气温(度)'].min()
print(data3_month)
#根据观测站的字数分类
print('-'*80)
data4=pd.read_csv(fpath,index_col="观测站").head(20)
data_len=data4.groupby(len)[['气温(度)']].max()
print(data_len)
运行结果:
D:\Python\p\Scripts\python.exe "D:\Python\python-learning\数据分析(二)\分组聚合.py"
日期 城市 行政区 观测站 气温(度) 相对湿度(%) 累积雨量(mm)
0 2015-01-01 新北市 烏來區 福山 13.7℃ 92 0.0
1 2015-01-02 臺南市 安平區 安平 23.5℃ 70 0.0
2 2015-01-03 臺東縣 東河鄉 七塊厝 19.6℃ 86 0.0
3 2015-01-04 新北市 貢寮區 福隆 14.2℃ 96 -99.0
4 2015-01-05 南投縣 仁愛鄉 小奇萊 8.3℃ 57 0.0
.. ... ... ... ... ... ... ...
479 2016-04-24 新北市 板橋區 板橋 15.6℃ 73 5.0
480 2016-04-25 宜蘭縣 大同鄉 翠峰湖 7.8℃ 100 0.0
481 2016-04-26 花蓮縣 壽豐鄉 大坑 15.7℃ 94 0.0
482 2016-04-27 新竹縣 五峰鄉 雪霸 15.7℃ 62 0.0
483 2016-04-28 桃園市 大溪區 大溪 14.8℃ 77 8.0
[484 rows x 7 columns]
--------------------------------------------------------------------------------
日期 城市 行政区 观测站 气温(度) 相对湿度(%) 累积雨量(mm)
0 2015-01-01 新北市 烏來區 福山 13.7℃ 92 0.0
1 2015-01-02 臺南市 安平區 安平 23.5℃ 70 0.0
2 2015-01-03 臺東縣 東河鄉 七塊厝 19.6℃ 86 0.0
3 2015-01-04 新北市 貢寮區 福隆 14.2℃ 96 -99.0
4 2015-01-05 南投縣 仁愛鄉 小奇萊 8.3℃ 57 0.0
5 2015-01-06 嘉義縣 大林鎮 大林 23.2℃ 63 0.0
6 2015-01-07 花蓮縣 玉里鎮 玉里 18.5℃ 85 0.0
7 2015-01-08 嘉義市 東區 嘉義市東區 25℃ 64 0.0
8 2015-01-09 宜蘭縣 頭城鎮 龜山島 12℃ 100 0.5
9 2015-01-10 新北市 平溪區 火燒寮 12.3℃ 100 2.5
10 2015-01-11 彰化縣 大城鄉 三豐 17.4℃ 81 0.0
11 2015-01-12 雲林縣 斗六市 斗六 23℃ 58 0.0
12 2015-01-13 南投縣 魚池鄉 魚池 26.3℃ 50 0.0
13 2015-01-14 臺東縣 海端鄉 向陽 16.3℃ 71 0.0
14 2015-01-15 屏東縣 竹田鄉 竹田 26.7℃ 80 0.0
15 2015-01-16 苗栗縣 造橋鄉 造橋 -99℃ -9900 -99.0
16 2015-01-17 新北市 石門區 白沙灣 13.7℃ 90 8.5
17 2015-01-18 苗栗縣 頭屋鄉 明德 17℃ 65 -99.0
18 2015-01-19 臺南市 下營區 下營 26.2℃ 58 0.0
19 2015-01-20 屏東縣 萬丹鄉 萬丹 27℃ 62 0.0
--------------------------------------------------------------------------------
False 23.5℃14.2℃23.2℃25℃12.3℃23℃16.3℃-99℃17℃27℃
True 13.7℃19.6℃8.3℃18.5℃12℃17.4℃26.3℃26.7℃13.7℃26.2℃
Name: 气温(度), dtype: object
--------------------------------------------------------------------------------
行政区 气温(度)
城市
南 仁愛鄉魚池鄉 8.3℃26.3℃
嘉 大林鎮東區 23.2℃25℃
宜 頭城鎮 12℃
屏 竹田鄉萬丹鄉 26.7℃27℃
彰 大城鄉 17.4℃
--------------------------------------------------------------------------------
相对湿度(%)
城市
False -8957
True 485
--------------------------------------------------------------------------------
气温(度) 相对湿度(%) 累积雨量(mm)
城市
南投縣 8.3℃ 2 0.0
嘉義市 25℃ 1 0.0
嘉義縣 23.2℃ 1 0.0
宜蘭縣 12℃ 1 0.5
屏東縣 27℃ 2 0.0
彰化縣 17.4℃ 1 0.0
新北市 14.2℃ 4 -88.0
臺南市 26.2℃ 2 0.0
臺東縣 19.6℃ 2 0.0
花蓮縣 18.5℃ 1 0.0
苗栗縣 17℃ 2 -198.0
雲林縣 23℃ 1 0.0
--------------------------------------------------------------------------------
D:\Python\python-learning\数据分析(二)\分组聚合.py:32: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
data3['日期1']=pd.to_datetime(data3['日期'])
日期 城市 行政区 观测站 气温(度) 相对湿度(%) 累积雨量(mm)
0 2015-01-01 新北市 烏來區 福山 13.7℃ 92 0.0
1 2015-01-02 臺南市 安平區 安平 23.5℃ 70 0.0
2 2015-01-03 臺東縣 東河鄉 七塊厝 19.6℃ 86 0.0
3 2015-01-04 新北市 貢寮區 福隆 14.2℃ 96 -99.0
4 2015-01-05 南投縣 仁愛鄉 小奇萊 8.3℃ 57 0.0
.. ... ... ... ... ... ... ...
115 2015-04-26 宜蘭縣 員山鄉 內城 16.3℃ 83 0.0
116 2015-04-27 花蓮縣 秀林鄉 和平 19℃ 71 0.0
117 2015-04-28 臺中市 潭子區 潭子 22.4℃ 64 0.0
118 2015-04-29 屏東縣 車城鄉 保力 23.3℃ 72 0.0
119 2015-04-30 新北市 淡水區 六塊厝 13.4℃ 94 19.5
[120 rows x 7 columns]
--------------------------------------------------------------------------------
日期 城市 行政区 观测站 气温(度) 相对湿度(%) 累积雨量(mm) 日期1
0 2015-01-01 新北市 烏來區 福山 13.7℃ 92 0.0 2015-01-01
1 2015-01-02 臺南市 安平區 安平 23.5℃ 70 0.0 2015-01-02
2 2015-01-03 臺東縣 東河鄉 七塊厝 19.6℃ 86 0.0 2015-01-03
3 2015-01-04 新北市 貢寮區 福隆 14.2℃ 96 -99.0 2015-01-04
4 2015-01-05 南投縣 仁愛鄉 小奇萊 8.3℃ 57 0.0 2015-01-05
.. ... ... ... ... ... ... ... ...
115 2015-04-26 宜蘭縣 員山鄉 內城 16.3℃ 83 0.0 2015-04-26
116 2015-04-27 花蓮縣 秀林鄉 和平 19℃ 71 0.0 2015-04-27
117 2015-04-28 臺中市 潭子區 潭子 22.4℃ 64 0.0 2015-04-28
118 2015-04-29 屏東縣 車城鄉 保力 23.3℃ 72 0.0 2015-04-29
119 2015-04-30 新北市 淡水區 六塊厝 13.4℃ 94 19.5 2015-04-30
[120 rows x 8 columns]
--------------------------------------------------------------------------------
日期1
1 -99℃
2 -99℃
3 11.1℃
4 13.4℃
Name: 气温(度), dtype: object
--------------------------------------------------------------------------------
气温(度)
观测站
2 27℃
3 8.3℃
5 25℃
进程已结束,退出代码为 0
注意:运行结果中有一处提示警告,但是我查询了很多资料也没有解决,如果宝宝们找到了合适的解决方法,欢迎评论,我会及时查看学习,谢谢大家。