注:学习笔记基于文彤老师的pandas的系列课程
课程链接:https://study.163.com/course/courseMain.htm?courseId=1005124008&share=1&shareId=1146477588
# 设定系统环境
import pandas as pd
pd.options.display.max_rows = 10 # 设定自由列表输出最多为10行
pd.__version__ # 显示当前Pandas版本号,默认输出最后一行内容(即使没有打印输出)
'1.1.0'
df2 = pd.read_csv("univ.csv", encoding ="GBK")#使用英文名称,否则可能会报错
#把文件放到了该目录下,因此不需要再写路径,注意编码要写
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
1.变量变换
1.1计算新变量
新变量为常数
df[‘varname’] = value
df2.newvar = 1 # 注意该命令不会报错,但是这是错误写法
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
df2['cons'] = 1
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 |
100 rows × 9 columns
基于原变量做简单四则运算
df[‘varname’] = df[‘oldvar’] * 100
df[‘varname’] = df.oldvar * 100
df2['new2'] = df2.总分 + df2.名次 + 1#new2可以不存在,若存在,则进行重新赋值
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 102.00 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 101.50 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 86.79 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 87.43 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 88.38 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 160.37 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 161.34 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 162.32 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 163.31 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 164.29 |
100 rows × 10 columns
import numpy
df2.new2 = numpy.sqrt(df2.总分) # numpy内置函数自动支持serial格式数据
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 |
100 rows × 10 columns
# import math
# df2['new3'] = math.sqrt(df2.总分) # 此处会报错,因为math中只支持对浮点数操作
#可以借助下面的进行变换
# df2
基于一个原变量做函数运算
df.apply(
func : 希望对行/列执行的函数表达式
axis = 0 : 针对行还是列进行计算
(0/‘index’: 针对每列进行计算
1/‘columns’: 针对每行进行计算)
)
简化的用法
df[‘varname’] = df.oldvar.apply(函数表达式)
import math
df2['new3'] = df2.总分.apply(math.sqrt)
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 11 columns
df2['new3'] = df2.总分.apply(numpy.sqrt)#numpy不用apply也可以实现,它默认
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 11 columns
对所有单元格进行相同的函数运算
dfnew = df.applymap(函数表达式) # 是以cell为单位在进行操作
df2[['名次', '总分']].applymap(math.sqrt)
名次 | 总分 | |
---|---|---|
0 | 1.000000 | 10.000000 |
1 | 1.414214 | 9.924717 |
2 | 1.732051 | 9.098901 |
3 | 2.000000 | 9.079097 |
4 | 2.236068 | 9.076343 |
... | ... | ... |
95 | 9.797959 | 7.960528 |
96 | 9.848858 | 7.958643 |
97 | 9.899495 | 7.957387 |
98 | 9.949874 | 7.956758 |
99 | 10.000000 | 7.955501 |
100 rows × 2 columns
不修改原df,而是生成新的df
df.assign(varname = expression)
df3 = df2.assign(new = df2.总分.apply(math.sqrt))
df3
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | new | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 | 10.000000 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 | 9.924717 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 | 9.098901 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 | 9.079097 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 | 7.960528 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 | 7.958643 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 | 7.957387 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 | 7.956758 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 | 7.955501 |
100 rows × 12 columns
1.2在指定位置插入新变量列
df.insert(
loc : 插入位置的索引值,0 <= loc <= len(columns)#即在最后加
column : 插入的新列名称
value : Series或者类数组结构的变量值
allow_duplicates = False : 是否允许新列重名
) # 该方法会直接修改原df
df2.insert(1,'newvar','cons')#与其默认变量属性一一对应
df2
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | cons | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | cons | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | cons | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | cons | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 12 columns
1.3修改/替换变量值
本质上是如何直接指定到单元格的问题,只要能准确定位单元格地址,就能够做到准确替换。
df2.所在城市.isin(['上海'])
0 False
1 False
2 False
3 False
4 False
...
95 False
96 False
97 False
98 False
99 False
Name: 所在城市, Length: 100, dtype: bool
df2.所在城市[70] = '上海市' # 这种引用方式会给出警告,因为其把【】当成切片,
#赋值会不恰当
df2[69:75]
D:\anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
"""Entry point for launching an IPython kernel.
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
69 | 70 | cons | 第三军医大学 | 64.81 | 医药 | 重庆 | 重庆 | 行业特色研究型 | 1 | 8.050466 | 8.050466 | |
70 | 71 | cons | 第二军医大学 | 64.74 | 医药 | 上海 | 上海市 | 行业特色研究型 | 1 | 8.046117 | 8.046117 | |
71 | 72 | cons | 湖南师范大学 | 64.65 | 师范 | 湖南 | 长沙市 | 区域研究型 | 湖南省 | 1 | 8.040522 | 8.040522 |
72 | 73 | cons | 第四军医大学 | 64.51 | 医药 | 陕西 | 西安 | 行业特色研究型 | 1 | 8.031812 | 8.031812 | |
73 | 74 | cons | 华南师范大学 | 64.42 | 师范 | 广东 | 广州市 | 区域特色研究型 | 广东省 | 1 | 8.026207 | 8.026207 |
74 | 75 | cons | 上海大学 | 64.41 | 综合 | 上海 | 上海市 | 区域研究型 | 上海市 | 1 | 8.025584 | 8.025584 |
df2['所在城市'][70] = '上海市' # 这种引用方式会给出警告
df2[69:75]
D:\anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
"""Entry point for launching an IPython kernel.
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
69 | 70 | cons | 第三军医大学 | 64.81 | 医药 | 重庆 | 重庆 | 行业特色研究型 | 1 | 8.050466 | 8.050466 | |
70 | 71 | cons | 第二军医大学 | 64.74 | 医药 | 上海 | 上海市 | 行业特色研究型 | 1 | 8.046117 | 8.046117 | |
71 | 72 | cons | 湖南师范大学 | 64.65 | 师范 | 湖南 | 长沙市 | 区域研究型 | 湖南省 | 1 | 8.040522 | 8.040522 |
72 | 73 | cons | 第四军医大学 | 64.51 | 医药 | 陕西 | 西安 | 行业特色研究型 | 1 | 8.031812 | 8.031812 | |
73 | 74 | cons | 华南师范大学 | 64.42 | 师范 | 广东 | 广州市 | 区域特色研究型 | 广东省 | 1 | 8.026207 | 8.026207 |
74 | 75 | cons | 上海大学 | 64.41 | 综合 | 上海 | 上海市 | 区域研究型 | 上海市 | 1 | 8.025584 | 8.025584 |
df2.loc[70, '所在城市'] = '上海市' # 精确引用,消停了,注意loc是相对索引的70
df2
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | cons | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | cons | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | cons | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | cons | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 12 columns
对应数值的替换
df.replace(
to_replace = None : 将被替换的原数值,所有严格匹配的数值将被用value替换(可以是str/regex/list/dict/Series/numeric/None)
value = None : 希望填充的新数值
inplace = False
)
df2.所在城市.replace('北京市', '帝都')# 单个值替换
0 帝都
1 帝都
2 上海市
3 武汉市
4 杭州市
...
95 金华市
96 合肥市
97 帝都
98 无锡市
99 太原市
Name: 所在城市, Length: 100, dtype: object
df2.所在城市.replace(['北京市', '上海市'], ['帝都', '魔都']) # 列表值批量替换
0 帝都
1 帝都
2 魔都
3 武汉市
4 杭州市
...
95 金华市
96 合肥市
97 帝都
98 无锡市
99 太原市
Name: 所在城市, Length: 100, dtype: object
# 字典批量映射替换
df2.所在城市.replace({'北京市' : '帝都', '上海市' : '魔都'})
0 帝都
1 帝都
2 魔都
3 武汉市
4 杭州市
...
95 金华市
96 合肥市
97 帝都
98 无锡市
99 太原市
Name: 所在城市, Length: 100, dtype: object
指定数值范围的替换
方法一:使用正则表达式完成替换,较复杂,一般不用
df.replace(regex, newvalue)
方法二:使用行筛选方式完成替换
用行筛选方式得到行索引,然后用loc命令定位替换
目前也支持直接筛选出单元格进行数值替换
注意:query命令的类SQL语句可以进行检索,但不直接支持数值替换
df2.总分.iloc[0:2] = 10#这些都是直接在df2上进行修改了
df2
C:\Users\lenovo\AppData\Roaming\Python\Python36\site-packages\pandas\core\indexing.py:670: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
iloc._setitem_with_indexer(indexer, value)
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 10.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | cons | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | cons | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | cons | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | cons | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 12 columns
df2.loc[3:5,'总分'] = 20
df2.head(10)
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 10.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 20.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 20.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
5 | 6 | cons | 中国人民大学 | 20.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.054281 | 9.054281 |
6 | 7 | cons | 上海交通大学 | 81.76 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.042124 | 9.042124 |
7 | 8 | cons | 南京大学 | 80.43 | 综合 | 江苏 | 南京市 | 中国研究型 | 教育部 | 1 | 8.968277 | 8.968277 |
8 | 9 | cons | 国防科学技术大学 | 80.31 | 理工 | 湖南 | 长沙市 | 中国研究型 | 中央军委 | 1 | 8.961585 | 8.961585 |
9 | 10 | cons | 中山大学 | 76.46 | 综合 | 广东 | 广州市 | 中国研究型 | 教育部 | 1 | 8.744141 | 8.744141 |
# 用loc命令完成替换
df2.loc[df2[df2.名次 < 10].index, '总分'] = 20 # 用index引用出相应的索引
df2.head(10)
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 20.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 20.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 20.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 20.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 20.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
5 | 6 | cons | 中国人民大学 | 20.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.054281 | 9.054281 |
6 | 7 | cons | 上海交通大学 | 20.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.042124 | 9.042124 |
7 | 8 | cons | 南京大学 | 20.00 | 综合 | 江苏 | 南京市 | 中国研究型 | 教育部 | 1 | 8.968277 | 8.968277 |
8 | 9 | cons | 国防科学技术大学 | 20.00 | 理工 | 湖南 | 长沙市 | 中国研究型 | 中央军委 | 1 | 8.961585 | 8.961585 |
9 | 10 | cons | 中山大学 | 76.46 | 综合 | 广东 | 广州市 | 中国研究型 | 教育部 | 1 | 8.744141 | 8.744141 |
# index可以省去
df2.loc[df2.名次 < 10, '总分'] = 20
df2.head(10)
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 20.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 20.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 20.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 20.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 20.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
5 | 6 | cons | 中国人民大学 | 20.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.054281 | 9.054281 |
6 | 7 | cons | 上海交通大学 | 20.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.042124 | 9.042124 |
7 | 8 | cons | 南京大学 | 20.00 | 综合 | 江苏 | 南京市 | 中国研究型 | 教育部 | 1 | 8.968277 | 8.968277 |
8 | 9 | cons | 国防科学技术大学 | 20.00 | 理工 | 湖南 | 长沙市 | 中国研究型 | 中央军委 | 1 | 8.961585 | 8.961585 |
9 | 10 | cons | 中山大学 | 76.46 | 综合 | 广东 | 广州市 | 中国研究型 | 教育部 | 1 | 8.744141 | 8.744141 |
# 直接进行定位和替换
df2.总分[df2.名次 < 10] = 25
df2
D:\anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 25.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 25.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 25.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 25.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 25.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | cons | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | cons | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | cons | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | cons | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 12 columns
# 注意这里的出错原因,先选行则知识一个拷贝,原本没有任何变化
#不推荐这样使用,就记住要先选列在选行,即为上面的做法,最优的为上面的上面的做法
#df2[df2.名次 < 10].总分 = 30
#df2
#下面的类SQL也是同理
# query语句无法直接实现数值替换,原因:query生成的是数据copy,不是地址引用
#df2.query("名次 < 10 and 类型 != '综合'")['总分'] = 25
#df2
# query语句可以用于index定位,然后实现数值替换
df2.loc[df2.query("名次 < 10 and 类型 == '综合'").index, '总分'] = 10
df2
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 25.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 10.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 10.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 10.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 |
96 | 97 | cons | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 |
97 | 98 | cons | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 |
98 | 99 | cons | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 |
99 | 100 | cons | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 |
100 rows × 12 columns
1.4 哑变量变换
pd.get_dummies(
data : 希望转换的数据框/变量列
prefix = None : 哑变量名称前缀
prefix_____seq = “_________”: 前缀和序号之间的连接字符,设定有prefix或列名时生效
dummy__na = False : 是否为NaNs专门设定一个哑变量列
columns = None : 希望转换的原始列名,如果不设定,则转换所有符合条件的列
drop__first = False : 是否返回k-1个哑变量,而不是k个哑变量
) # 返回值为数据框
注意:被转换为哑变量的相应原始列会被自动删除。
df2.head()
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.0 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 |
1 | 2 | cons | 清华大学 | 25.0 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 |
2 | 3 | cons | 复旦大学 | 10.0 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 |
3 | 4 | cons | 武汉大学 | 10.0 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 |
4 | 5 | cons | 浙江大学 | 10.0 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 |
pd.get_dummies(df2.类型, prefix = "pre" )
pre_农林 | pre_医药 | pre_师范 | pre_政法 | pre_民族 | pre_理工 | pre_综合 | pre_财经 | |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
96 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
97 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
98 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
99 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
100 rows × 8 columns
pd.get_dummies(df2, columns=['类型'] )#直接将两个表连接在了一起
名次 | newvar | 学校名称 | 总分 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | 类型_农林 | 类型_医药 | 类型_师范 | 类型_政法 | 类型_民族 | 类型_理工 | 类型_综合 | 类型_财经 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.00 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
1 | 2 | cons | 清华大学 | 25.00 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
2 | 3 | cons | 复旦大学 | 10.00 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
3 | 4 | cons | 武汉大学 | 10.00 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
4 | 5 | cons | 浙江大学 | 10.00 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | cons | 浙江师范大学 | 63.37 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
96 | 97 | cons | 安徽大学 | 63.34 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
97 | 98 | cons | 首都医科大学 | 63.32 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
98 | 99 | cons | 江南大学 | 63.31 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
99 | 100 | cons | 山西大学 | 63.29 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
100 rows × 19 columns
1.5数值变量分段
pd.cut(
x : 希望进行分段的变量列名称
bins : 具体的分段设定
int :被等距等分的段数
sequence of scalars :具体的每一个分段起点,必须包括最值,可不等距
right = True : 每段是否包括右侧界值
labels = None : 为每个分段提供自定义标签
include_lowest = False : 第一段是否包括最左侧界值,需要和right参数配合
) # 分段结果是数值类型为Categories的序列
pd.qcut() # 按照频数,而不是按照取值范围进行等分
df2['cls'] = pd.cut(df2.名次, bins=[1,3,7],
right= True, include_lowest = True)
df2.head(10)
名次 | newvar | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | cls | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | cons | 北京大学 | 10.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 | (0.999, 3.0] |
1 | 2 | cons | 清华大学 | 25.00 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 | (0.999, 3.0] |
2 | 3 | cons | 复旦大学 | 10.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 | (0.999, 3.0] |
3 | 4 | cons | 武汉大学 | 10.00 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 | (3.0, 7.0] |
4 | 5 | cons | 浙江大学 | 10.00 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 | (3.0, 7.0] |
5 | 6 | cons | 中国人民大学 | 10.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.054281 | 9.054281 | (3.0, 7.0] |
6 | 7 | cons | 上海交通大学 | 10.00 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.042124 | 9.042124 | (3.0, 7.0] |
7 | 8 | cons | 南京大学 | 10.00 | 综合 | 江苏 | 南京市 | 中国研究型 | 教育部 | 1 | 8.968277 | 8.968277 | NaN |
8 | 9 | cons | 国防科学技术大学 | 25.00 | 理工 | 湖南 | 长沙市 | 中国研究型 | 中央军委 | 1 | 8.961585 | 8.961585 | NaN |
9 | 10 | cons | 中山大学 | 76.46 | 综合 | 广东 | 广州市 | 中国研究型 | 教育部 | 1 | 8.744141 | 8.744141 | NaN |
实战:进一步整理PM2.5数据
要求:
在数据中剔除PM2.5为-999的案例(均为缺失数据)
建立一个新变量high,当PM2.5 >= 200时为1,否则为0
建立一个新变量high2,按照PM2.5 在100,200,500分为四段,分别取值0,1,2,3
将high2转换为哑变量组
按照50一个组段,将PM2.5数值转换为分段变量high3
bj2012 = pd.read_csv("PM25\Beijing_2012_HourlyPM2.5_created20140325.csv",encoding ="gbk",skiprows=3)#注意sep
bj2012
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8779 | Beijing | PM2.5 | 2012-12-31 19:00 | 2012 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
8780 | Beijing | PM2.5 | 2012-12-31 20:00 | 2012 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
8781 | Beijing | PM2.5 | 2012-12-31 21:00 | 2012 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
8782 | Beijing | PM2.5 | 2012-12-31 22:00 | 2012 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
8783 | Beijing | PM2.5 | 2012-12-31 23:00 | 2012 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
8784 rows × 11 columns
bj2012[bj2012.Value.isin([-999])]
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|---|
321 | Beijing | PM2.5 | 2012-1-14 9:00 | 2012 | 1 | 14 | 9 | -999 | 礸/mg?1 Hr | Missing | NaN |
322 | Beijing | PM2.5 | 2012-1-14 10:00 | 2012 | 1 | 14 | 10 | -999 | 礸/mg?1 Hr | Missing | NaN |
323 | Beijing | PM2.5 | 2012-1-14 11:00 | 2012 | 1 | 14 | 11 | -999 | 礸/mg?1 Hr | Missing | NaN |
324 | Beijing | PM2.5 | 2012-1-14 12:00 | 2012 | 1 | 14 | 12 | -999 | 礸/mg?1 Hr | Missing | NaN |
325 | Beijing | PM2.5 | 2012-1-14 13:00 | 2012 | 1 | 14 | 13 | -999 | 礸/mg?1 Hr | Missing | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8695 | Beijing | PM2.5 | 2012-12-28 7:00 | 2012 | 12 | 28 | 7 | -999 | 礸/mg?1 Hr | Missing | NaN |
8696 | Beijing | PM2.5 | 2012-12-28 8:00 | 2012 | 12 | 28 | 8 | -999 | 礸/mg?1 Hr | Missing | NaN |
8697 | Beijing | PM2.5 | 2012-12-28 9:00 | 2012 | 12 | 28 | 9 | -999 | 礸/mg?1 Hr | Missing | NaN |
8698 | Beijing | PM2.5 | 2012-12-28 10:00 | 2012 | 12 | 28 | 10 | -999 | 礸/mg?1 Hr | Missing | NaN |
8699 | Beijing | PM2.5 | 2012-12-28 11:00 | 2012 | 12 | 28 | 11 | -999 | 礸/mg?1 Hr | Missing | NaN |
489 rows × 11 columns
bj2012= bj2012.loc[bj2012.query("Value != '-999'").index]
bj2012
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8779 | Beijing | PM2.5 | 2012-12-31 19:00 | 2012 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
8780 | Beijing | PM2.5 | 2012-12-31 20:00 | 2012 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
8781 | Beijing | PM2.5 | 2012-12-31 21:00 | 2012 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
8782 | Beijing | PM2.5 | 2012-12-31 22:00 | 2012 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
8783 | Beijing | PM2.5 | 2012-12-31 23:00 | 2012 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
8295 rows × 11 columns
bj2012[bj2012.Value.isin([-999])]#已经清除完毕
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name |
---|
bj2012.loc[bj2012.Value>=200, 'high'] = 1
bj2012.head(10)
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | high | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid | 1.0 |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid | 1.0 |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid | 1.0 |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid | NaN |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid | NaN |
5 | Beijing | PM2.5 | 2012-1-1 5:00 | 2012 | 1 | 1 | 5 | 23 | 礸/mg? | 1 Hr | Valid | NaN |
6 | Beijing | PM2.5 | 2012-1-1 6:00 | 2012 | 1 | 1 | 6 | 19 | 礸/mg? | 1 Hr | Valid | NaN |
7 | Beijing | PM2.5 | 2012-1-1 7:00 | 2012 | 1 | 1 | 7 | 14 | 礸/mg? | 1 Hr | Valid | NaN |
8 | Beijing | PM2.5 | 2012-1-1 8:00 | 2012 | 1 | 1 | 8 | 16 | 礸/mg? | 1 Hr | Valid | NaN |
9 | Beijing | PM2.5 | 2012-1-1 9:00 | 2012 | 1 | 1 | 9 | 21 | 礸/mg? | 1 Hr | Valid | NaN |
bj2012.loc[bj2012.Value<200, 'high'] = 0
bj2012.head(10)
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | high | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid | 1.0 |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid | 1.0 |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid | 1.0 |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid | 0.0 |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid | 0.0 |
5 | Beijing | PM2.5 | 2012-1-1 5:00 | 2012 | 1 | 1 | 5 | 23 | 礸/mg? | 1 Hr | Valid | 0.0 |
6 | Beijing | PM2.5 | 2012-1-1 6:00 | 2012 | 1 | 1 | 6 | 19 | 礸/mg? | 1 Hr | Valid | 0.0 |
7 | Beijing | PM2.5 | 2012-1-1 7:00 | 2012 | 1 | 1 | 7 | 14 | 礸/mg? | 1 Hr | Valid | 0.0 |
8 | Beijing | PM2.5 | 2012-1-1 8:00 | 2012 | 1 | 1 | 8 | 16 | 礸/mg? | 1 Hr | Valid | 0.0 |
9 | Beijing | PM2.5 | 2012-1-1 9:00 | 2012 | 1 | 1 | 9 | 21 | 礸/mg? | 1 Hr | Valid | 0.0 |
bj2012['high2'] = pd.cut(bj2012.Value, bins=[0,100,200,500,9999],labels = [0,1,2,3],
right= True, include_lowest = True)
bj2012.head(10)
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | high | high2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
5 | Beijing | PM2.5 | 2012-1-1 5:00 | 2012 | 1 | 1 | 5 | 23 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
6 | Beijing | PM2.5 | 2012-1-1 6:00 | 2012 | 1 | 1 | 6 | 19 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
7 | Beijing | PM2.5 | 2012-1-1 7:00 | 2012 | 1 | 1 | 7 | 14 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
8 | Beijing | PM2.5 | 2012-1-1 8:00 | 2012 | 1 | 1 | 8 | 16 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
9 | Beijing | PM2.5 | 2012-1-1 9:00 | 2012 | 1 | 1 | 9 | 21 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 |
pd.get_dummies(bj2012.high2, prefix = "pre" )
pre_0 | pre_1 | pre_2 | pre_3 | |
---|---|---|---|---|
0 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 1 | 0 |
3 | 1 | 0 | 0 | 0 |
4 | 1 | 0 | 0 | 0 |
... | ... | ... | ... | ... |
8779 | 0 | 1 | 0 | 0 |
8780 | 0 | 1 | 0 | 0 |
8781 | 1 | 0 | 0 | 0 |
8782 | 1 | 0 | 0 | 0 |
8783 | 1 | 0 | 0 | 0 |
8295 rows × 4 columns
bj2012['high3'] = pd.cut(bj2012.Value, bins=50,
right= True, include_lowest = True)
bj2012.head()
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | high | high2 | high3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (298.2, 318.08] |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (198.8, 218.68] |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (218.68, 238.56] |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 | (79.52, 99.4] |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 | (19.88, 39.76] |
2.文件级别的数据管理
2.1 数据拆分
标记数据拆分组
df.groupby(
by : 用于分组的变量名/函数
axis = 0 :
level = None : 相应的轴存在多重索引时,指定用于分组的级别
as_index = True : 在结果中将组标签作为索引
sort = True : 结果是否按照分组关键字进行排序
dropna = True : 是否将NA看作普通键值用于分组,1.1版新增,False代表缺失值不删除
) # 生成的是分组索引标记,而不是新的DF
在数据分组之后,许多数据处理/分析/绘图命令都可以在各组间单独执行
df2g = df2.groupby('类型')
df2g
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001E6C1C136A0>
df2g.groups
{'农林': [31, 45, 48, 64, 87, 94], '医药': [44, 69, 70, 72, 97], '师范': [14, 27, 33, 39, 49, 51, 71, 73, 85, 91, 95], '政法': [65], '民族': [88], '理工': [1, 8, 11, 12, 18, 19, 20, 24, 25, 28, 29, 30, 34, 36, 37, 38, 40, 41, 42, 43, 47, 50, 53, 54, 55, 56, 59, 60, 66, 67, 68, 77, 78, 80, 82, 83, 90, 92, 93], '综合': [0, 2, 3, 4, 5, 6, 7, 9, 10, 13, 15, 16, 17, 21, 22, 23, 26, 32, 35, 46, 52, 57, 58, 61, 62, 74, 79, 84, 86, 96, 98, 99], '财经': [63, 75, 76, 81, 89]}
df2g.describe()#把所有能描述的数值类型全部转换出来
名次 | 总分 | ... | new2 | new3 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | count | mean | ... | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | |
类型 | |||||||||||||||||||||
农林 | 6.0 | 62.500000 | 24.889757 | 32.0 | 46.75 | 57.0 | 82.25 | 95.0 | 6.0 | 65.345000 | ... | 8.115879 | 8.249242 | 6.0 | 8.083104 | 0.100613 | 7.977468 | 8.004472 | 8.083583 | 8.115879 | 8.249242 |
医药 | 5.0 | 71.400000 | 18.769656 | 45.0 | 70.00 | 71.0 | 73.00 | 98.0 | 5.0 | 64.682000 | ... | 8.050466 | 8.125885 | 5.0 | 8.042333 | 0.059975 | 7.957387 | 8.031812 | 8.046117 | 8.050466 | 8.125885 |
师范 | 11.0 | 58.090909 | 27.540714 | 15.0 | 37.00 | 52.0 | 80.00 | 96.0 | 11.0 | 66.371818 | ... | 8.198056 | 8.645808 | 11.0 | 8.144606 | 0.202306 | 7.960528 | 8.009352 | 8.101852 | 8.198056 | 8.645808 |
政法 | 1.0 | 66.000000 | NaN | 66.0 | 66.00 | 66.0 | 66.00 | 66.0 | 1.0 | 64.900000 | ... | 8.056054 | 8.056054 | 1.0 | 8.056054 | NaN | 8.056054 | 8.056054 | 8.056054 | 8.056054 | 8.056054 |
民族 | 1.0 | 89.000000 | NaN | 89.0 | 89.00 | 89.0 | 89.00 | 89.0 | 1.0 | 63.780000 | ... | 7.986238 | 7.986238 | 1.0 | 7.986238 | NaN | 7.986238 | 7.986238 | 7.986238 | 7.986238 | 7.986238 |
理工 | 39.0 | 48.179487 | 25.180268 | 2.0 | 29.50 | 42.0 | 67.50 | 93.0 | 39.0 | 64.789231 | ... | 8.293370 | 9.924717 | 39.0 | 8.244249 | 0.357317 | 7.978722 | 8.054191 | 8.128961 | 8.293370 | 9.924717 |
综合 | 32.0 | 38.968750 | 32.587831 | 1.0 | 10.75 | 25.5 | 62.25 | 100.0 | 32.0 | 55.552812 | ... | 8.724814 | 10.000000 | 32.0 | 8.463412 | 0.485967 | 7.955501 | 8.062568 | 8.392979 | 8.724814 | 10.000000 |
财经 | 5.0 | 77.800000 | 9.497368 | 64.0 | 76.00 | 77.0 | 82.00 | 90.0 | 5.0 | 64.262000 | ... | 8.019975 | 8.059777 | 5.0 | 8.016319 | 0.027983 | 7.985612 | 7.999375 | 8.016857 | 8.019975 | 8.059777 |
8 rows × 40 columns
df3g = df2.groupby(['类型', '所在省份'])
df3g.groups
{('农林', '北京'): [31, 87], ('农林', '广东'): [94], ('农林', '江苏'): [45], ('农林', '湖北'): [48], ('农林', '陕西'): [64], ('医药', '上海'): [70], ('医药', '北京'): [44, 97], ('医药', '重庆'): [69], ('医药', '陕西'): [72], ('师范', '上海'): [27], ('师范', '北京'): [14, 91], ('师范', '吉林'): [39], ('师范', '广东'): [73], ('师范', '江苏'): [49], ('师范', '浙江'): [95], ('师范', '湖北'): [33], ('师范', '湖南'): [71], ('师范', '重庆'): [51], ('师范', '陕西'): [85], ('政法', '北京'): [65], ('民族', '北京'): [88], ('理工', '上海'): [18, 47, 78], ('理工', '北京'): [1, 24, 29, 40, 41, 59, 67, 77, 82, 92], ('理工', '四川'): [36, 50], ('理工', '天津'): [19], ('理工', '安徽'): [11, 66], ('理工', '广东'): [30], ('理工', '江苏'): [43, 53, 55, 60, 80], ('理工', '河北'): [90], ('理工', '河南'): [54], ('理工', '浙江'): [93], ('理工', '湖北'): [12, 37, 38], ('理工', '湖南'): [8], ('理工', '福建'): [83], ('理工', '辽宁'): [25, 28], ('理工', '陕西'): [34, 42, 68], ('理工', '黑龙江'): [20, 56], ('综合', '上海'): [2, 6, 74], ('综合', '云南'): [58], ('综合', '北京'): [0, 5], ('综合', '吉林'): [10], ('综合', '四川'): [13], ('综合', '天津'): [15], ('综合', '安徽'): [96], ('综合', '山东'): [21, 52], ('综合', '山西'): [99], ('综合', '广东'): [9, 57, 86], ('综合', '广西'): [84], ('综合', '江苏'): [7, 23, 62, 98], ('综合', '江西'): [79], ('综合', '河南'): [61], ('综合', '浙江'): [4], ('综合', '湖北'): [3], ('综合', '湖南'): [17, 32], ('综合', '甘肃'): [35], ('综合', '福建'): [22], ('综合', '重庆'): [26], ('综合', '陕西'): [16, 46], ('财经', '上海'): [63], ('财经', '北京'): [81, 89], ('财经', '四川'): [76], ('财经', '湖北'): [75]}
df3g.sum() # 可以使用tab调用语法参考
名次 | 总分 | cons | new2 | new3 | ||
---|---|---|---|---|---|---|
类型 | 所在省份 | |||||
农林 | 北京 | 120 | 131.84 | 2 | 16.236107 | 16.236107 |
广东 | 95 | 63.64 | 1 | 7.977468 | 7.977468 | |
江苏 | 46 | 65.90 | 1 | 8.117881 | 8.117881 | |
湖北 | 49 | 65.77 | 1 | 8.109871 | 8.109871 | |
陕西 | 65 | 64.92 | 1 | 8.057295 | 8.057295 | |
... | ... | ... | ... | ... | ... | ... |
综合 | 陕西 | 64 | 139.44 | 2 | 16.693362 | 16.693362 |
财经 | 上海 | 64 | 64.96 | 1 | 8.059777 | 8.059777 |
北京 | 172 | 127.76 | 2 | 15.984987 | 15.984987 | |
四川 | 77 | 64.27 | 1 | 8.016857 | 8.016857 | |
湖北 | 76 | 64.32 | 1 | 8.019975 | 8.019975 |
62 rows × 5 columns
dftmp = df2.copy()
dftmp.set_index(['类型','学校名称'],inplace =True)
dftmp
名次 | newvar | 总分 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | cls | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
类型 | 学校名称 | |||||||||||
综合 | 北京大学 | 1 | cons | 10.00 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 10.000000 | 10.000000 | (0.999, 3.0] |
理工 | 清华大学 | 2 | cons | 25.00 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 | (0.999, 3.0] |
综合 | 复旦大学 | 3 | cons | 10.00 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 | (0.999, 3.0] |
武汉大学 | 4 | cons | 10.00 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 | (3.0, 7.0] | |
浙江大学 | 5 | cons | 10.00 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 | (3.0, 7.0] | |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
师范 | 浙江师范大学 | 96 | cons | 63.37 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 | NaN |
综合 | 安徽大学 | 97 | cons | 63.34 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 | NaN |
医药 | 首都医科大学 | 98 | cons | 63.32 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 | NaN |
综合 | 江南大学 | 99 | cons | 63.31 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 | NaN |
山西大学 | 100 | cons | 63.29 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 | NaN |
100 rows × 11 columns
import numpy as np
dftmp.loc[('综合', '北京大学'), '办学方向'] = np.nan
dftmp
名次 | newvar | 总分 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | cls | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
类型 | 学校名称 | |||||||||||
综合 | 北京大学 | 1 | cons | 10.00 | 北京 | 北京市 | NaN | 教育部 | 1 | 10.000000 | 10.000000 | (0.999, 3.0] |
理工 | 清华大学 | 2 | cons | 25.00 | 北京 | 北京市 | 中国研究型 | 教育部 | 1 | 9.924717 | 9.924717 | (0.999, 3.0] |
综合 | 复旦大学 | 3 | cons | 10.00 | 上海 | 上海市 | 中国研究型 | 教育部 | 1 | 9.098901 | 9.098901 | (0.999, 3.0] |
武汉大学 | 4 | cons | 10.00 | 湖北 | 武汉市 | 中国研究型 | 教育部 | 1 | 9.079097 | 9.079097 | (3.0, 7.0] | |
浙江大学 | 5 | cons | 10.00 | 浙江 | 杭州市 | 中国研究型 | 教育部 | 1 | 9.076343 | 9.076343 | (3.0, 7.0] | |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
师范 | 浙江师范大学 | 96 | cons | 63.37 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 | 1 | 7.960528 | 7.960528 | NaN |
综合 | 安徽大学 | 97 | cons | 63.34 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | 1 | 7.958643 | 7.958643 | NaN |
医药 | 首都医科大学 | 98 | cons | 63.32 | 北京 | 北京市 | 区域特色研究型 | 北京市 | 1 | 7.957387 | 7.957387 | NaN |
综合 | 江南大学 | 99 | cons | 63.31 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | 1 | 7.956758 | 7.956758 | NaN |
山西大学 | 100 | cons | 63.29 | 山西 | 太原市 | 区域研究型 | 山西省 | 1 | 7.955501 | 7.955501 | NaN |
100 rows × 11 columns
dftmp.groupby('办学方向', dropna = False).mean()
名次 | 总分 | cons | new2 | new3 | |
---|---|---|---|---|---|
办学方向 | |||||
中国研究型 | 18.588235 | 58.072059 | 1.0 | 8.627476 | 8.627476 |
区域特色研究型 | 86.538462 | 63.902308 | 1.0 | 7.993801 | 7.993801 |
区域研究型 | 74.437500 | 64.435625 | 1.0 | 8.027038 | 8.027038 |
行业特色研究型 | 58.111111 | 65.385556 | 1.0 | 8.085932 | 8.085932 |
NaN | 1.000000 | 10.000000 | 1.0 | 10.000000 | 10.000000 |
dftmp.groupby('办学方向', dropna = True).mean()
名次 | 总分 | cons | new2 | new3 | |
---|---|---|---|---|---|
办学方向 | |||||
中国研究型 | 18.588235 | 58.072059 | 1.0 | 8.627476 | 8.627476 |
区域特色研究型 | 86.538462 | 63.902308 | 1.0 | 7.993801 | 7.993801 |
区域研究型 | 74.437500 | 64.435625 | 1.0 | 8.027038 | 8.027038 |
行业特色研究型 | 58.111111 | 65.385556 | 1.0 | 8.085932 | 8.085932 |
基于拆分进行筛选
筛选出出其中的一组
dfgroup.get_group()
df2g.get_group('农林').mean()
名次 62.500000
总分 65.345000
cons 1.000000
new2 8.083104
new3 8.083104
dtype: float64
筛选出所需的列
该操作也适用于希望对不同的变量列进行不同操作时
df2g['名次'].max()
类型
农林 95
医药 98
师范 96
政法 66
民族 89
理工 93
综合 100
财经 90
Name: 名次, dtype: int64
2.2分组汇总
在使用groupby完成数据拆分后,就可以按照需求分组进行信息汇总,此时可以使用其它专门的汇总命令,如agg来完成汇总操作
使用agg函数进行汇总
df.aggregate()
名称可以直接简写为agg,0.20版新增,可以用axis指定汇总维度
可以直接使用的汇总函数
count() Number of non-null observations
size() group sizes
sum() Sum of values
mean() Mean of values
median() Arithmetic median of values
min() Minimum
max() Maximum
std() Unbiased standard deviation
var() Unbiased variance
skew() Unbiased skewness (3rd moment)
kurt() Unbiased kurtosis (4th moment)
quantile() Sample quantile (value at %)
apply() Generic apply
cov() Unbiased covariance (binary)
corr() Correlation (binary)
df2g.agg('count')
名次 | newvar | 学校名称 | 总分 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | cons | new2 | new3 | cls | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
类型 | ||||||||||||
农林 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 0 |
医药 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 0 |
师范 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 0 |
政法 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
民族 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
理工 | 39 | 39 | 39 | 39 | 39 | 39 | 39 | 39 | 39 | 39 | 39 | 1 |
综合 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 6 |
财经 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 0 |
df2.agg('median')
名次 50.500000
总分 65.105000
cons 1.000000
new2 8.104937
new3 8.104937
dtype: float64
df2.agg(['mean', 'median'])
名次 | 总分 | cons | new2 | new3 | |
---|---|---|---|---|---|
mean | 50.41 | 62.0003 | 1.0 | 8.267798 | 8.267798 |
median | 50.50 | 65.1050 | 1.0 | 8.104937 | 8.104937 |
df2g.agg(['mean', 'median'])
名次 | 总分 | cons | new2 | new3 | ||||||
---|---|---|---|---|---|---|---|---|---|---|
mean | median | mean | median | mean | median | mean | median | mean | median | |
类型 | ||||||||||
农林 | 62.500000 | 57.0 | 65.345000 | 65.345 | 1 | 1 | 8.083104 | 8.083583 | 8.083104 | 8.083583 |
医药 | 71.400000 | 71.0 | 64.682000 | 64.740 | 1 | 1 | 8.042333 | 8.046117 | 8.042333 | 8.046117 |
师范 | 58.090909 | 52.0 | 66.371818 | 65.640 | 1 | 1 | 8.144606 | 8.101852 | 8.144606 | 8.101852 |
政法 | 66.000000 | 66.0 | 64.900000 | 64.900 | 1 | 1 | 8.056054 | 8.056054 | 8.056054 | 8.056054 |
民族 | 89.000000 | 89.0 | 63.780000 | 63.780 | 1 | 1 | 7.986238 | 7.986238 | 7.986238 | 7.986238 |
理工 | 48.179487 | 42.0 | 64.789231 | 65.670 | 1 | 1 | 8.244249 | 8.128961 | 8.244249 | 8.128961 |
综合 | 38.968750 | 25.5 | 55.552812 | 65.060 | 1 | 1 | 8.463412 | 8.392979 | 8.463412 | 8.392979 |
财经 | 77.800000 | 77.0 | 64.262000 | 64.270 | 1 | 1 | 8.016319 | 8.016857 | 8.016319 | 8.016857 |
# 引用非内置函数
import numpy as np
print(df2.总分.agg(np.sum))
df2g.总分.agg(np.sum)
6200.03
类型
农林 392.07
医药 323.41
师范 730.09
政法 64.90
民族 63.78
理工 2526.78
综合 1777.69
财经 321.31
Name: 总分, dtype: float64
# 引用自定义函数
def mymean(x):
return x.mean()
df2.总分.agg(mymean)
62.00030000000001
df2g.agg(mymean)
名次 | 总分 | cons | new2 | new3 | |
---|---|---|---|---|---|
类型 | |||||
农林 | 62.500000 | 65.345000 | 1 | 8.083104 | 8.083104 |
医药 | 71.400000 | 64.682000 | 1 | 8.042333 | 8.042333 |
师范 | 58.090909 | 66.371818 | 1 | 8.144606 | 8.144606 |
政法 | 66.000000 | 64.900000 | 1 | 8.056054 | 8.056054 |
民族 | 89.000000 | 63.780000 | 1 | 7.986238 | 7.986238 |
理工 | 48.179487 | 64.789231 | 1 | 8.244249 | 8.244249 |
综合 | 38.968750 | 55.552812 | 1 | 8.463412 | 8.463412 |
财经 | 77.800000 | 64.262000 | 1 | 8.016319 | 8.016319 |
named aggregation方式
0.25版新增,在汇总中同时指定列名和汇总函数,
从而能够在一个汇总命令中得到不同的汇总结果。#针对不同的变量进行不同的计算
df2g.agg(
样本量 = pd.NamedAgg(column = '总分', aggfunc = 'count'),
平均分 = pd.NamedAgg(column = '总分', aggfunc = np.mean),
最低分 = pd.NamedAgg(column = '总分', aggfunc = 'min'),
最高分 = pd.NamedAgg(column = '总分', aggfunc = 'max')
)
样本量 | 平均分 | 最低分 | 最高分 | |
---|---|---|---|---|
类型 | ||||
农林 | 6 | 65.345000 | 63.64 | 68.05 |
医药 | 5 | 64.682000 | 63.32 | 66.03 |
师范 | 11 | 66.371818 | 63.37 | 74.75 |
政法 | 1 | 64.900000 | 64.90 | 64.90 |
民族 | 1 | 63.780000 | 63.78 | 63.78 |
理工 | 39 | 64.789231 | 25.00 | 75.14 |
综合 | 32 | 55.552812 | 10.00 | 76.46 |
财经 | 5 | 64.262000 | 63.77 | 64.96 |
df2g.agg(#可以简写
样本量 = pd.NamedAgg('总分', 'count'),
平均分 = pd.NamedAgg('总分', np.mean),
最低分 = pd.NamedAgg('总分', 'min'),
最高分 = pd.NamedAgg('总分', 'max')
)
样本量 | 平均分 | 最低分 | 最高分 | |
---|---|---|---|---|
类型 | ||||
农林 | 6 | 65.345000 | 63.64 | 68.05 |
医药 | 5 | 64.682000 | 63.32 | 66.03 |
师范 | 11 | 66.371818 | 63.37 | 74.75 |
政法 | 1 | 64.900000 | 64.90 | 64.90 |
民族 | 1 | 63.780000 | 63.78 | 63.78 |
理工 | 39 | 64.789231 | 25.00 | 75.14 |
综合 | 32 | 55.552812 | 10.00 | 76.46 |
财经 | 5 | 64.262000 | 63.77 | 64.96 |
其他分组汇总方法
在生成交叉表的同时对单元格指定具体的汇总指标和汇总函数
df.pivot_table()
pd.crosstab()
pd.crosstab(df2.办学方向, df2.类型)#直接一步生成,不用先分组再汇总
类型 | 农林 | 医药 | 师范 | 政法 | 民族 | 理工 | 综合 | 财经 |
---|---|---|---|---|---|---|---|---|
办学方向 | ||||||||
中国研究型 | 0 | 0 | 3 | 0 | 0 | 13 | 19 | 0 |
区域特色研究型 | 1 | 1 | 5 | 0 | 0 | 2 | 1 | 3 |
区域研究型 | 0 | 0 | 2 | 0 | 0 | 3 | 11 | 0 |
行业特色研究型 | 5 | 4 | 1 | 1 | 1 | 21 | 1 | 2 |
2.3重复测量数据的格式转换
基于多重索引,Pandas可以很容易地完成长型、宽型数据格式的相互转换。
转换为最简格式
df.stack(
level = -1 : 需要处理的索引级别(级别也是从0开始),默认为全部,int/string/list
dropna = True : 是否删除为缺失值的行
) # 转换后的结果可能为Series
df3 = pd.read_excel("儿童生长研究.xlsx", index_col= [0, 2])
df3
性别 | 测量值 | ||
---|---|---|---|
个体ID | 年龄 | ||
1 | 8 | F | 21.0 |
10 | F | 20.0 | |
12 | F | 21.5 | |
14 | F | 23.0 | |
2 | 8 | F | 21.0 |
... | ... | ... | ... |
26 | 14 | M | 30.0 |
27 | 8 | M | 22.0 |
10 | M | 21.5 | |
12 | M | 23.5 | |
14 | M | 25.0 |
108 rows × 2 columns
df3s = df3.stack()
df3s
个体ID 年龄
1 8 性别 F
测量值 21
10 性别 F
测量值 20
12 性别 F
...
27 10 测量值 21.5
12 性别 M
测量值 23.5
14 性别 M
测量值 25
Length: 216, dtype: object
长宽型格式的自由互转(掌握下面两个即可)
df.unstack(
level = -1 : 需要处理的索引级别,默认为全部,int/string/list
fill_value : 用于填充缺失值的数值
)
df3s.unstack(1)#第一级索引即年龄,把年龄转换成列了
年龄 | 8 | 10 | 12 | 14 | |
---|---|---|---|---|---|
个体ID | |||||
1 | 性别 | F | F | F | F |
测量值 | 21 | 20 | 21.5 | 23 | |
2 | 性别 | F | F | F | F |
测量值 | 21 | 21.5 | 24 | 25.5 | |
3 | 性别 | F | F | F | F |
... | ... | ... | ... | ... | ... |
25 | 测量值 | 22.5 | 25.5 | 25.5 | 26 |
26 | 性别 | M | M | M | M |
测量值 | 23 | 24.5 | 26 | 30 | |
27 | 性别 | M | M | M | M |
测量值 | 22 | 21.5 | 23.5 | 25 |
54 rows × 4 columns
df3s.unstack([1,2])#2级索引即包含了性别和测量值的变量
年龄 | 8 | 10 | 12 | 14 | ||||
---|---|---|---|---|---|---|---|---|
性别 | 测量值 | 性别 | 测量值 | 性别 | 测量值 | 性别 | 测量值 | |
个体ID | ||||||||
1 | F | 21 | F | 20 | F | 21.5 | F | 23 |
2 | F | 21 | F | 21.5 | F | 24 | F | 25.5 |
3 | F | 20.5 | F | 24 | F | 24.5 | F | 26 |
4 | F | 23.5 | F | 24.5 | F | 25 | F | 26.5 |
5 | F | 21.5 | F | 23 | F | 22.5 | F | 23.5 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
23 | M | 21.5 | M | 23.5 | M | 24 | M | 28 |
24 | M | 17 | M | 24.5 | M | 26 | M | 29.5 |
25 | M | 22.5 | M | 25.5 | M | 25.5 | M | 26 |
26 | M | 23 | M | 24.5 | M | 26 | M | 30 |
27 | M | 22 | M | 21.5 | M | 23.5 | M | 25 |
27 rows × 8 columns
数据转置
df.T
df3.T
个体ID | 1 | 2 | 3 | ... | 25 | 26 | 27 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
年龄 | 8 | 10 | 12 | 14 | 8 | 10 | 12 | 14 | 8 | 10 | ... | 12 | 14 | 8 | 10 | 12 | 14 | 8 | 10 | 12 | 14 |
性别 | F | F | F | F | F | F | F | F | F | F | ... | M | M | M | M | M | M | M | M | M | M |
测量值 | 21 | 20 | 21.5 | 23 | 21 | 21.5 | 24 | 25.5 | 20.5 | 24 | ... | 25.5 | 26 | 23 | 24.5 | 26 | 30 | 22 | 21.5 | 23.5 | 25 |
2 rows × 108 columns
其他可用于格式转换的命令(了解即可)
df.melt()
df.pivot()
df.pivot_table()
2.4多个数据源的合并
2.4.1数据的纵向合并(即合并行)
df.append(
other : 希望添加的DF/Series/字典/上述对象的列表(使用列表方式,就可以实现一次合并多个新对象)
ignore_index = False : 添加时是否忽略索引
verify_integrity = False : 是否检查索引值的唯一性,有重复时报错
)
df21 = pd.read_excel("高校信息.xlsx", sheet_name = 'part1')
df22 = pd.read_excel("高校信息.xlsx", sheet_name = 'part2')
df21 = df21.sort_values('总分')
df2 = df21.append(df22) # 注意索引值的大小
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
49 | 50 | 南京师范大学 | 65.71 | 师范 | 江苏 | 南京市 | 区域特色研究型 | 江苏省 |
48 | 49 | 华中农业大学 | 65.77 | 农林 | 湖北 | 武汉市 | 行业特色研究型 | 教育部 |
47 | 48 | 华东理工大学 | 65.79 | 理工 | 上海 | 上海市 | 行业特色研究型 | 教育部 |
46 | 47 | 西北大学 | 65.88 | 综合 | 陕西 | 西安市 | 区域研究型 | 陕西省 |
45 | 46 | 南京农业大学 | 65.90 | 农林 | 江苏 | 南京市 | 行业特色研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
45 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
46 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
47 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
48 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
49 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
df2 = df21.append([df22, df22[:10], df22[40:]]) # 用list实现多个数据源的合并
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
49 | 50 | 南京师范大学 | 65.71 | 师范 | 江苏 | 南京市 | 区域特色研究型 | 江苏省 |
48 | 49 | 华中农业大学 | 65.77 | 农林 | 湖北 | 武汉市 | 行业特色研究型 | 教育部 |
47 | 48 | 华东理工大学 | 65.79 | 理工 | 上海 | 上海市 | 行业特色研究型 | 教育部 |
46 | 47 | 西北大学 | 65.88 | 综合 | 陕西 | 西安市 | 区域研究型 | 陕西省 |
45 | 46 | 南京农业大学 | 65.90 | 农林 | 江苏 | 南京市 | 行业特色研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
45 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
46 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
47 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
48 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
49 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
120 rows × 8 columns
2.4.2数据的横向合并(合并列)
横向合并时
merge类sql 不给参数默认找共同列
concat属pandas 默认找索引(流水号除外),没有则按行位置直接拼接
merge命令使用类SQL的连接方式
pd.merge(
需要合并的DF
left : 需要合并的左侧DF
right : 需要合并的右侧DF
how = 'inner' : 具体的连接类型
{'left', 'right', 'outer', 'inner'}
两个DF的连接方式
on : 用于连接两个DF的关键变量(多个时为列表),必须在两侧都出现
left_on : 左侧DF用于连接的关键变量(多个时为列表)
right_on : 右侧DF用于连接的关键变量(多个时为列表)
left_index = False : 是否将左侧DF的索引用于连接
right_index = False : 是否将右侧DF的索引用于连接
其他附加设定
sort = False : 是否在合并前按照关键变量排序(会影响合并后的案例顺序)
suffixes : 重名变量的处理方式,提供长度为2的列表元素,分别作为后缀
suffixes=(‘_x’, ‘_y’)
copy = True
indicator = False : 在结果DF中增加’_merge’列,用于记录数据来源
也可以直接提供相应的变量列名
Categorical类型,取值:‘left_only’, ‘right_only’, ‘both’
validate = None : 核查合并类型是否为所指定的情况
‘one_to_one’ or ‘1:1’
‘one_to_many’ or ‘1:m’
‘many_to_one’ or ‘m:1’
‘many_to_many’ or ‘m:m’(实际上不做检查)
0.21版新增
)
df2a = pd.read_excel("高校信息.xlsx", sheet_name = 'var6')
df2b = pd.read_excel("高校信息.xlsx", sheet_name = 'var3')
pd.merge(df2a, df2b)
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
pd.merge(df2a, df2b[:20])
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
15 | 16 | 南开大学 | 74.46 | 综合 | 天津 | 天津市 | 中国研究型 | 教育部 |
16 | 17 | 西安交通大学 | 73.56 | 综合 | 陕西 | 西安市 | 中国研究型 | 教育部 |
17 | 18 | 中南大学 | 73.13 | 综合 | 湖南 | 长沙市 | 中国研究型 | 教育部 |
18 | 19 | 同济大学 | 72.85 | 理工 | 上海 | 上海市 | 中国研究型 | 教育部 |
19 | 20 | 天津大学 | 72.81 | 理工 | 天津 | 天津市 | 中国研究型 | 教育部 |
20 rows × 8 columns
df2ai = df2a.set_index('学校名称')
df2bi = df2b.set_index('学校名称')
pd.merge(df2ai, df2bi, left_index = True, right_index = True)
名次 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|
学校名称 | |||||||
北京大学 | 1 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
清华大学 | 2 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
复旦大学 | 3 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
武汉大学 | 4 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
浙江大学 | 5 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... |
浙江师范大学 | 96 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
安徽大学 | 97 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
首都医科大学 | 98 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
江南大学 | 99 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
山西大学 | 100 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 7 columns
df2ai = df2a.set_index('学校名称')
df2bi = df2b
pd.merge(df2ai, df2bi, left_index = True, right_on = '学校名称' )
名次 | 总分 | 类型 | 所在省份 | 所在城市 | 学校名称 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 100.00 | 综合 | 北京 | 北京市 | 北京大学 | 中国研究型 | 教育部 |
1 | 2 | 98.50 | 理工 | 北京 | 北京市 | 清华大学 | 中国研究型 | 教育部 |
2 | 3 | 82.79 | 综合 | 上海 | 上海市 | 复旦大学 | 中国研究型 | 教育部 |
3 | 4 | 82.43 | 综合 | 湖北 | 武汉市 | 武汉大学 | 中国研究型 | 教育部 |
4 | 5 | 82.38 | 综合 | 浙江 | 杭州市 | 浙江大学 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 63.37 | 师范 | 浙江 | 金华市 | 浙江师范大学 | 区域特色研究型 | 浙江省 |
96 | 97 | 63.34 | 综合 | 安徽 | 合肥市 | 安徽大学 | 区域研究型 | 安徽省 |
97 | 98 | 63.32 | 医药 | 北京 | 北京市 | 首都医科大学 | 区域特色研究型 | 北京市 |
98 | 99 | 63.31 | 综合 | 江苏 | 无锡市 | 江南大学 | 区域特色研究型 | 教育部 |
99 | 100 | 63.29 | 综合 | 山西 | 太原市 | 山西大学 | 区域研究型 | 山西省 |
100 rows × 8 columns
# 现在合并时索引名称和变量名称已经可以混用
pd.merge(df2ai, df2bi, on = '学校名称' )
学校名称 | 名次 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 北京大学 | 1 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 清华大学 | 2 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 复旦大学 | 3 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 武汉大学 | 4 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 浙江大学 | 5 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 浙江师范大学 | 96 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 安徽大学 | 97 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 首都医科大学 | 98 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 江南大学 | 99 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 山西大学 | 100 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
Concat命令简介
同时支持横向合并与纵向合并
pd.concat(
objs : 需要合并的对象,列表形式提供
axis = 0 : 对行还是对列方向进行合并
{0/‘index’, 1/‘columns’}
join = ‘outer’ : 对另一个轴向的索引值如何进行处理
{‘inner’, ‘outer’}
ignore_index = False
keys = None : 为不同数据源的提供合并后的索引值
verify_integrity = False
copy = True
)
# 纵向合并
df21 = pd.read_excel("高校信息.xlsx", sheet_name = 'part1')
df22 = pd.read_excel("高校信息.xlsx", sheet_name = 'part2')
pd.concat([df21, df22])
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
45 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
46 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
47 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
48 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
49 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
pd.concat([df21, df22], keys = ['A', 'B'])
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | ||
---|---|---|---|---|---|---|---|---|---|
A | 0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 | |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 | |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 | |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 | |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
B | 45 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
46 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 | |
47 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 | |
48 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 | |
49 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
# 横向合并
df2a = pd.read_excel("高校信息.xlsx", sheet_name = 'var6')
df2b = pd.read_excel("高校信息.xlsx", sheet_name = 'var3')
pd.concat([df2a, df2b], axis = 1)#因为没有索引,所以直接按行位置合并
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 学校名称 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 北京大学 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 清华大学 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 复旦大学 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 武汉大学 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 浙江大学 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 浙江师范大学 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 安徽大学 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 首都医科大学 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 江南大学 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 山西大学 | 区域研究型 | 山西省 |
100 rows × 9 columns
df2ai = df2a.set_index('学校名称')
df2bi = df2b.set_index('学校名称')
pd.concat([df2ai, df2bi], axis = 1)
名次 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|
学校名称 | |||||||
北京大学 | 1 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
清华大学 | 2 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
复旦大学 | 3 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
武汉大学 | 4 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
浙江大学 | 5 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... |
浙江师范大学 | 96 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
安徽大学 | 97 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
首都医科大学 | 98 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
江南大学 | 99 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
山西大学 | 100 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 7 columns
实战:对PM2.5数据做基本整理
bj2012
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | high | high2 | high3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (298.2, 318.08] |
1 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (198.8, 218.68] |
2 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid | 1.0 | 2 | (218.68, 238.56] |
3 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 | (79.52, 99.4] |
4 | Beijing | PM2.5 | 2012-1-1 4:00 | 2012 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid | 0.0 | 0 | (19.88, 39.76] |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8779 | Beijing | PM2.5 | 2012-12-31 19:00 | 2012 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN | 0.0 | 1 | (119.28, 139.16] |
8780 | Beijing | PM2.5 | 2012-12-31 20:00 | 2012 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN | 0.0 | 1 | (99.4, 119.28] |
8781 | Beijing | PM2.5 | 2012-12-31 21:00 | 2012 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN | 0.0 | 0 | (39.76, 59.64] |
8782 | Beijing | PM2.5 | 2012-12-31 22:00 | 2012 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN | 0.0 | 0 | (19.88, 39.76] |
8783 | Beijing | PM2.5 | 2012-12-31 23:00 | 2012 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN | 0.0 | 0 | (19.88, 39.76] |
8295 rows × 14 columns
bj2012g= bj2012.groupby('Month')
bj2012g['Value'].mean()
Month
1 118.922388
2 84.442029
3 96.474324
4 87.835883
5 90.966715
...
8 81.165329
9 59.784314
10 94.951351
11 87.436963
12 109.187296
Name: Value, Length: 12, dtype: float64
bj2012[bj2012.Value>200].Day.nunique()#nuique计算非重复数值的个数
31
bj2012[bj2012.Value>300].Day.nunique()
23
bj2012[bj2012.Value>500].Day.nunique()
3
bj2009x = pd.read_csv("PM25\Beijing_2012_HourlyPM2.5_created20140325 - 2009.csv",encoding ="gbk",skiprows=3,index_col='Year')#注意sep
bj2009x
Site | Parameter | Date (LST) | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|
Year | ||||||||||
2009 | Beijing | PM2.5 | 2009-1-1 0:00 | 1 | 1 | 0 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 1:00 | 1 | 1 | 1 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 2:00 | 1 | 1 | 2 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 3:00 | 1 | 1 | 3 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 4:00 | 1 | 1 | 4 | -999 | 礸/m?1 Hr | Missing | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2009 | Beijing | PM2.5 | 2009-12-31 19:00 | 12 | 31 | 19 | 77 | 礸/m?1 Hr | Valid | NaN |
2009 | Beijing | PM2.5 | 2009-12-31 20:00 | 12 | 31 | 20 | 120 | 礸/m?1 Hr | Valid | NaN |
2009 | Beijing | PM2.5 | 2009-12-31 21:00 | 12 | 31 | 21 | 163 | 礸/m?1 Hr | Valid | NaN |
2009 | Beijing | PM2.5 | 2009-12-31 22:00 | 12 | 31 | 22 | 167 | 礸/m?1 Hr | Valid | NaN |
2009 | Beijing | PM2.5 | 2009-12-31 23:00 | 12 | 31 | 23 | -999 | 礸/m?1 Hr | Missing | NaN |
8760 rows × 10 columns
bj2012x=bj2012.set_index('Year')
bj2012x
Site | Parameter | Date (LST) | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|
Year | ||||||||||
2012 | Beijing | PM2.5 | 2012-1-1 0:00 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid |
2012 | Beijing | PM2.5 | 2012-1-1 1:00 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid |
2012 | Beijing | PM2.5 | 2012-1-1 2:00 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid |
2012 | Beijing | PM2.5 | 2012-1-1 3:00 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid |
2012 | Beijing | PM2.5 | 2012-1-1 4:00 | 1 | 1 | 4 | 38 | 礸/mg? | 1 Hr | Valid |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2012 | Beijing | PM2.5 | 2012-12-31 19:00 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 20:00 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 21:00 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 22:00 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 23:00 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
8784 rows × 10 columns
bj2009_2012=pd.concat([bj2009x, bj2012x])
bj2009_2012
Site | Parameter | Date (LST) | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|
Year | ||||||||||
2009 | Beijing | PM2.5 | 2009-1-1 0:00 | 1 | 1 | 0 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 1:00 | 1 | 1 | 1 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 2:00 | 1 | 1 | 2 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 3:00 | 1 | 1 | 3 | -999 | 礸/m?1 Hr | Missing | NaN |
2009 | Beijing | PM2.5 | 2009-1-1 4:00 | 1 | 1 | 4 | -999 | 礸/m?1 Hr | Missing | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2012 | Beijing | PM2.5 | 2012-12-31 19:00 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 20:00 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 21:00 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 22:00 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
2012 | Beijing | PM2.5 | 2012-12-31 23:00 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
17544 rows × 10 columns
bj2009_2012x=bj2009_2012.stack()
bj2009_2012x
Year
2009 Site Beijing
Parameter PM2.5
Date (LST) 2009-1-1 0:00
Month 1
Day 1
...
2012 Day 31
Hour 23
Value 35
Unit 礸/mg?1 Hr
Duration Valid
Length: 158005, dtype: object