文章目录
Study:day07—Numpy科学计算与Pandas数据分析
- Pandas中的基本数据结构
- Series:
- DataFrame
- 两种数据格式的构建
- 可以通过pd.Series或者pd.DataFrame将列表,元组,字典构建为Series或者DataFrame
- 关于DataFrame的构建
- Pandas中IO操作:
- 读操作:读取read_csv/excel/html
- 写操作:to_csv/excel/dict/json/list/array/markdown/latex
本周内容:
- pandas当中数据的增删改查[核心]
- pandas当中的常见统计函数
- pandas的SAC操作[核心]:
- S篇: 主要是分组的一些功能
- A篇: Apply应用篇
- A: agg聚合操作
- T: Transform转换操作
- F: Filter过滤操作
- 其他操作: map/apply
- C篇: 关于数据合并
- concat: 将多个表按行或者按列进行合并
- merge: 按字段合并
- pandas当中关于时序数据的处理[核心]:
- 什么是时序数据
- 时序数据的转换
- 时序数据的提取
- 数据清洗操作[核心]:
- 重复值处理
- 缺失值处理
- 异常值处理
- 数据标准化
- 离散数据连续化
- 连续数据离散化
1.1 Pandas 当中的数据查询
import pandas as pd
import numpy as np
import sys
print('Python version:', sys.version)
print('Pandas version:', pd.__version__)
print('Numpy version:', np.__version__)
Python version: 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:03:56) [MSC v.1929 64 bit (AMD64)]
Pandas version: 2.2.2
Numpy version: 1.26.4
data = pd.read_csv("./data/beijing_tianqi_2018.csv")
data.head() # 查看数据前五行
ymd | bWendu | yWendu | tianqi | fengxiang | fengli | aqi | aqiInfo | aqiLevel | |
---|---|---|---|---|---|---|---|---|---|
0 | 2018-01-00 | 3℃ | -6℃ | 晴~多云 | 东北风 | 2 | 59 | 良 | 2 |
1 | 2018-01-01 | 3℃ | -6℃ | 晴~多云 | 东北风 | 1-2级 | 59 | 良 | 2 |
2 | 2018-01-02 | 2℃ | -5℃ | 阴~多云 | 东北风 | 1-2级 | 49 | 优 | 1 |
3 | 2018-01-03 | 2℃ | -5℃ | 多云 | 北风 | 1-2级 | 28 | 优 | 1 |
4 | 2018-01-04 | 0℃ | -8℃ | 阴 | 东北风 | 1-2级 | 28 | 优 | 1 |
- 通过df[列名]获取指定列名对应列的值
- 通过df[列名列表] 获取指定列对应的值
- 可以通过loc方法按照行列名称的标签进行查询
- 可以通过iloc方法按照行列标签的索引进行查询
基础查询
# 通过df列名获取指定列名对应列的值
# 通过df[列名列表] 获取指定列对应的值
data['tianqi'] # 获取天气这一列
data[["tianqi", "aqi"]] # 获取tianqi和aqi这两列数据
使用loc查询
# data.loc # 可以根据行列标签的名称进行查询
data.loc[0, "ymd"] # 根据行列标签查询指定的值
data.loc[[0, 1, 2], ['ymd', 'bWendu', 'yWendu']] # 可以查询多行多列
data.loc[:2, :'yWendu'] # 可以查询多行多列,开头可以通过切片省略
- 练习
1.查询前五行,后四列所有内容
2.查询tianqi,aqi,aqiInfo这三列内容,其中关于2018-01-04,2018-01-05这两天的数据
data.loc[:5, 'fengli':]
data.loc[4:5, ['tianqi', 'aqi', 'aqiInfo']]
使用iloc查询
data.iloc[9, 6] # 查询第十行,第7列的内容
data.iloc[0:5, :5] # 通过切牌您查询,出入切片对应的索引值即可,查询前五行和前五列
data.iloc[::2, 1::2] # 查询所有奇数行偶数列的信息
1.1.1 根据条件查询
- data[条件表达式]:通过条件表达式查询数据
- data[(条件1) & (条件2)…]:同时满足多个条件的数据
- data[(条件1) | (条件2)…]:满足一个条件的数据
- 可以使用函数进行查询
- def 定义的关键字
- lambda 匿名函数的使用
- df.loc # 根据行列标签的值进行查询
- df.iloc # 根据行列索引值进行查询
data[data['aqi'] > 50] # 查询aqi大于50的数据
data[data['aqiInfo'] == '优'] # 查询aqiInfo为优的数据
data[data['ymd'].str.startswith('2018-09')] # 找到2018年9月份的天气
data[(data['fengxiang'] == '东北风') & (data['aqi'] > 50)]
data.loc[(data['aqi'] > 100) | (data['aqiInfo'] == '轻度污染')] # 同样也支持条件表达式
- 白天温度大于15度的天气
- 白天温度在16-20度之间,且aqiInfo等于优的天气
# 数据的修改
data['bWendu'] = data['bWendu'].str.strip('℃').astype(int)
data['yWendu'] = data['yWendu'].str.strip('℃').astype(int)
data.loc[(data['bWendu'] > 16) & (data['bWendu'] < 20) & (data['aqiInfo'] == '优')]
data.loc[lambda data: (data['bWendu'] < 20) & (data['bWendu'] > 16)] # 使用lambda 匿名函数
# 可以使用apply+lambda函数,优化上述方法
data[(data['bWendu'].apply(lambda x: 16 < x < 20)) & (data['aqiInfo'] == '优')]
ymd | bWendu | yWendu | tianqi | fengxiang | fengli | aqi | aqiInfo | aqiLevel | |
---|---|---|---|---|---|---|---|---|---|
113 | 2018-04-23 | 19 | 9 | 多云 | 东北风 | 3-4级 | 34 | 优 | 1 |
273 | 2018-09-30 | 19 | 13 | 多云 | 西北风 | 4-5级 | 22 | 优 | 1 |
283 | 2018-10-10 | 17 | 4 | 多云~晴 | 西北风 | 1-2级 | 25 | 优 | 1 |
284 | 2018-10-11 | 18 | 5 | 晴~多云 | 北风 | 1-2级 | 30 | 优 | 1 |
291 | 2018-10-18 | 18 | 5 | 晴 | 南风 | 1-2级 | 49 | 优 | 1 |
296 | 2018-10-23 | 19 | 4 | 晴 | 西南风 | 3-4级 | 37 | 优 | 1 |
300 | 2018-10-27 | 17 | 5 | 多云 | 西南风 | 1-2级 | 33 | 优 | 1 |
301 | 2018-10-28 | 17 | 4 | 多云~晴 | 西北风 | 4-5级 | 32 | 优 | 1 |
304 | 2018-10-31 | 17 | 3 | 晴 | 西南风 | 1-2级 | 47 | 优 | 1 |