pandas学习笔记(二):变量的行、列、索引的基本操作

切片本身就是一个列表,因此不需要加 [ ]

注:学习笔记基于文彤老师的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 对数据作简单浏览

print(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 x 8 columns]
# 数据框的基本信息
df2.info()

RangeIndex: 100 entries, 0 to 99
Data columns (total 8 columns):
名次      100 non-null int64
学校名称    100 non-null object
总分      100 non-null float64
类型      100 non-null object
所在省份    100 non-null object
所在城市    100 non-null object
办学方向    100 non-null object
主管部门    100 non-null object
dtypes: float64(1), int64(1), object(6)
memory usage: 6.4+ KB
# 浏览前几条记录
df2.head(10)#head默认前5条
名次 学校名称 总分 类型 所在省份 所在城市 办学方向 主管部门
0 1 北京大学 100.00 综合 北京 北京市 中国研究型 教育部
1 2 清华大学 98.50 理工 北京 北京市 中国研究型 教育部
2 3 复旦大学 82.79 综合 上海 上海市 中国研究型 教育部
3 4 武汉大学 82.43 综合 湖北 武汉市 中国研究型 教育部
4 5 浙江大学 82.38 综合 浙江 杭州市 中国研究型 教育部
5 6 中国人民大学 81.98 综合 北京 北京市 中国研究型 教育部
6 7 上海交通大学 81.76 综合 上海 上海市 中国研究型 教育部
7 8 南京大学 80.43 综合 江苏 南京市 中国研究型 教育部
8 9 国防科学技术大学 80.31 理工 湖南 长沙市 中国研究型 中央军委
9 10 中山大学 76.46 综合 广东 广州市 中国研究型 教育部
# 浏览最后几条记录
df2.tail(3)# 默认5条
名次 学校名称 总分 类型 所在省份 所在城市 办学方向 主管部门
97 98 首都医科大学 63.32 医药 北京 北京市 区域特色研究型 北京市
98 99 江南大学 63.31 综合 江苏 无锡市 区域特色研究型 教育部
99 100 山西大学 63.29 综合 山西 太原市 区域研究型 山西省

1.2 重命名变量列

直接修改columns属性

df.columns = 新的名称list

# 给出变量名/列名
df2.columns
Index(['名次', '学校名称', '总分', '类型', '所在省份', '所在城市', '办学方向', '主管部门'], dtype='object')
df2.columns = ['名次2', '学校名称2', '总分', '类型',
               '所在省份', '所在城市', '办学方向', '主管部门']
#列表数必须全部对应,否则会报错
df2
名次2 学校名称2 总分 类型 所在省份 所在城市 办学方向 主管部门
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

只修改指定列名

df.rename(

columns = 新旧名称字典 : {‘旧名称’: ‘新名称’}

inplace = False : 是否直接替换原数据框,默认即为False
)

df3=df2.rename(
    columns = {'名次2': '名次', '学校名称2':'学校名称'}
) 
print(df3)
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 x 8 columns]
名次2 学校名称2 总分 类型 所在省份 所在城市 办学方向 主管部门
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.rename(
    columns = {'名次2': '名次', '学校名称2':'学校名称'}, inplace = True
) 
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.3 筛选变量列

df.var

只适用于已存在的列

只能筛选单列,结果为Series

df2.名次
0       1
1       2
2       3
3       4
4       5
     ... 
95     96
96     97
97     98
98     99
99    100
Name: 名次, Length: 100, dtype: int64

df[[‘var1’, ‘var2’]]

多列时,列名需要用列表形式提供(因此可使用列表中的切片操作)

多列的筛选结果为DF

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 × 2 columns

1.4 删除变量列

df.drop(

index / columns = 准备删除的行/列标签,多个时用列表形式提供

inplace = False : 是否直接更改原数据框,默认为False

) # pandas0.21版本以上,之前的老版本较为复杂,不多说

df2.drop(columns = ['名次', '所在城市'])
学校名称 总分 类型 所在省份 办学方向 主管部门
0 北京大学 100.00 综合 北京 中国研究型 教育部
1 清华大学 98.50 理工 北京 中国研究型 教育部
2 复旦大学 82.79 综合 上海 中国研究型 教育部
3 武汉大学 82.43 综合 湖北 中国研究型 教育部
4 浙江大学 82.38 综合 浙江 中国研究型 教育部
... ... ... ... ... ... ...
95 浙江师范大学 63.37 师范 浙江 区域特色研究型 浙江省
96 安徽大学 63.34 综合 安徽 区域研究型 安徽省
97 首都医科大学 63.32 医药 北京 区域特色研究型 北京市
98 江南大学 63.31 综合 江苏 区域特色研究型 教育部
99 山西大学 63.29 综合 山西 区域研究型 山西省

100 rows × 6 columns

del df[‘column-name’]

直接删除原数据框相应的一列,建议尽量少用

1.5 变量类型的转换

Pandas支持的数据类型

具体类型是Python,Numpy各种类型的混合,可以比下表分的更细

float

int

string

bool

datetime64[ns], datetime64[ns, tz], timedelta[ns] #都与时间格式有关

category

object#其实质即为string类型

df.dtypes : 查看各列的数据类型

df2.dtypes
名次        int64
学校名称     object
总分      float64
类型       object
所在省份     object
所在城市     object
办学方向     object
主管部门     object
dtype: object

在不同数据类型间转换

df.astype(

dtype : 指定希望转换的数据类型(可以使用numpy或者python中的数据类型: int/float/bool/str )

copy = True : 是否生成新的副本,而不是替换原数据框

errors = ‘raise’ : 转换出错时是否抛出错误,‘raise’/‘ignore’

)

df2.astype('str').dtypes
名次      object
学校名称    object
总分      object
类型      object
所在省份    object
所在城市    object
办学方向    object
主管部门    object
dtype: object
df2.名次.astype('str')
0       1
1       2
2       3
3       4
4       5
     ... 
95     96
96     97
97     98
98     99
99    100
Name: 名次, Length: 100, dtype: object
df2.astype('int', errors = 'ignore').dtypes
名次       int32
学校名称    object
总分       int32
类型      object
所在省份    object
所在城市    object
办学方向    object
主管部门    object
dtype: object

#以下的转换了解即可,不推荐使用

明确指定转换类型的函数:

pd.to_datetime()

pd.to_timedelta()

pd.to_numeric()

df.to_string()

可以配合df.apply来批量进行多列的转换

df.infer_objects() 基于数据特征进行自动转换,0.21版以后新增

实战:对PM2.5数据做简单清理

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.drop(columns = ['Parameter','Duration','QC Name'],inplace = True )
#之前执行了一次删除,在执行就会因为找不到而报错
bj2012
Site Date (LST) Year Month Day Hour Value Unit
0 Beijing 2012-1-1 0:00 2012 1 1 0 303 礸/mg?
1 Beijing 2012-1-1 1:00 2012 1 1 1 215 礸/mg?
2 Beijing 2012-1-1 2:00 2012 1 1 2 222 礸/mg?
3 Beijing 2012-1-1 3:00 2012 1 1 3 85 礸/mg?
4 Beijing 2012-1-1 4:00 2012 1 1 4 38 礸/mg?
... ... ... ... ... ... ... ... ...
8779 Beijing 2012-12-31 19:00 2012 12 31 19 131 礸/mg?1 Hr
8780 Beijing 2012-12-31 20:00 2012 12 31 20 113 礸/mg?1 Hr
8781 Beijing 2012-12-31 21:00 2012 12 31 21 45 礸/mg?1 Hr
8782 Beijing 2012-12-31 22:00 2012 12 31 22 39 礸/mg?1 Hr
8783 Beijing 2012-12-31 23:00 2012 12 31 23 35 礸/mg?1 Hr

8784 rows × 8 columns

bj2012.rename(
    columns = {'Date (LST)': '时间', 'Value':'数值'}, inplace = True
) 
bj2012
Site 时间 Year Month Day Hour 数值 Unit
0 Beijing 2012-1-1 0:00 2012 1 1 0 303 礸/mg?
1 Beijing 2012-1-1 1:00 2012 1 1 1 215 礸/mg?
2 Beijing 2012-1-1 2:00 2012 1 1 2 222 礸/mg?
3 Beijing 2012-1-1 3:00 2012 1 1 3 85 礸/mg?
4 Beijing 2012-1-1 4:00 2012 1 1 4 38 礸/mg?
... ... ... ... ... ... ... ... ...
8779 Beijing 2012-12-31 19:00 2012 12 31 19 131 礸/mg?1 Hr
8780 Beijing 2012-12-31 20:00 2012 12 31 20 113 礸/mg?1 Hr
8781 Beijing 2012-12-31 21:00 2012 12 31 21 45 礸/mg?1 Hr
8782 Beijing 2012-12-31 22:00 2012 12 31 22 39 礸/mg?1 Hr
8783 Beijing 2012-12-31 23:00 2012 12 31 23 35 礸/mg?1 Hr

8784 rows × 8 columns

bj2012.dtypes
Site     object
时间       object
Year      int64
Month     int64
Day       int64
Hour      int64
数值        int64
Unit     object
dtype: object

2. 索引

索引的用途:

用于在分析、可视化、数据展示、数据操作中标记数据行

提供数据汇总、合并、筛选时的关键依据

提供数据重构时的关键依据

注意事项:

索引是不可直接修改的,只能增、删、替换

逻辑上索引不应当出现重复值,Pandas对这种情况不会报错,但显然有潜在风险

2.1建立索引

新建数据框时建立索引

所有的数据框默认都已经拥有流水号格式的索引,因此这里的“建立”索引指的是自定义索引

df1 = pd.DataFrame(
{'var1' : 1.0, 'var2' : [1,2,3,4],
 'var3' :["test","train","test","train"], 'var4' : 'cons'},
 index = [0, 1 , 2, 5]#index的数量一定要和行数相对应
)

df1
var1 var2 var3 var4
0 1.0 1 test cons
1 1.0 2 train cons
2 1.0 3 test cons
5 1.0 4 train cons

2.2 读入数据时建立索引

数据列直接提供索引值,因此指明相应的数据列即可

df2 = pd.read_csv("univ.csv", encoding ="gbk", index_col="学校名称" )
df2
名次 总分 类型 所在省份 所在城市 办学方向 主管部门
学校名称
北京大学 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

# 生成复合索引
df2 = pd.read_csv("univ.csv", encoding ="gbk",
                  index_col=["类型", "学校名称"] )
df2
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 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 × 6 columns

2.3 指定某列为索引列

df.set_index(

keys : 被指定为索引的列名,复合索引用list格式提供

drop = True : 建立索引后是否删除该列

append = False : 是否在原索引基础上添加索引,默认是直接替换原索引

inplace = False : 是否直接修改原数据框

)

df2.reset_index(inplace=True) # 筛选其中一个进行还原
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

df_new = df2.set_index(['名次','学校名称'], drop = False)
df_new
类型 学校名称 名次 总分 所在省份 所在城市 办学方向 主管部门
名次 学校名称
1 北京大学 综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
2 清华大学 理工 清华大学 2 98.50 北京 北京市 中国研究型 教育部
3 复旦大学 综合 复旦大学 3 82.79 上海 上海市 中国研究型 教育部
4 武汉大学 综合 武汉大学 4 82.43 湖北 武汉市 中国研究型 教育部
5 浙江大学 综合 浙江大学 5 82.38 浙江 杭州市 中国研究型 教育部
... ... ... ... ... ... ... ... ... ...
96 浙江师范大学 师范 浙江师范大学 96 63.37 浙江 金华市 区域特色研究型 浙江省
97 安徽大学 综合 安徽大学 97 63.34 安徽 合肥市 区域研究型 安徽省
98 首都医科大学 医药 首都医科大学 98 63.32 北京 北京市 区域特色研究型 北京市
99 江南大学 综合 江南大学 99 63.31 江苏 无锡市 区域特色研究型 教育部
100 山西大学 综合 山西大学 100 63.29 山西 太原市 区域研究型 山西省

100 rows × 8 columns

# 生成复合索引
df_new = df2.set_index('名次')# 不删除变量列
df_new
类型 学校名称 总分 所在省份 所在城市 办学方向 主管部门
名次
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

将索引还原回变量列

df.reset_index(

drop = False : 是否将索引直接删除,而不是还原为变量列

inplace = False : 是否直接修改原数据框

level = None : 对于多重索引,确定转换哪个级别为变量

)

df_new2 = df2.copy() # 真正生成副本,而不是指定另一个别名
#df_new2 = df2给df2起了一个别名,操作会在df2上进行操作
df_new2.set_index(['名次','类型','所在省份'], inplace = True)
df_new2
学校名称 总分 所在城市 办学方向 主管部门
名次 类型 所在省份
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 × 5 columns

df_new2.reset_index(level = ['类型'],inplace = True) # 筛选其中一个进行还原
df_new2
类型 学校名称 总分 所在城市 办学方向 主管部门
名次 所在省份
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 × 6 columns

df_new2.reset_index(level = ['名次','所在省份']) # 保留一个作为索引
名次 所在省份 类型 学校名称 总分 所在城市 办学方向 主管部门
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

df_new2.reset_index(inplace = True) # 将索引全部还原为变量
df_new2
名次 所在省份 类型 学校名称 总分 所在城市 办学方向 主管部门
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

2.4引用和修改索引

引用索引

注意:索引仍然是有存储格式的,注意区分数值型和字符型的引用方式

2.4.1修改索引

修改索引名

本质上和变量列名的修改方式相同

df2.index.names # 复数形式的names代表可能是多重索引
#默认的流水号索引所以结果为None
FrozenList([None])
df2.index.names = ['idx'] 
df2.index.names
FrozenList(['idx'])
df_new2.set_index(['名次','类型','所在省份'], inplace = True)
df_new2
学校名称 总分 所在城市 办学方向 主管部门
名次 类型 所在省份
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 × 5 columns

df_new2.index.names = [None, None, None] # None代表无名称
df_new2
学校名称 总分 所在城市 办学方向 主管部门
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 × 5 columns

修改索引值

这里的修改本质上是全部替换,因为索引值不能修改,只能替换

#df1.index [3] = 6   # 此处无法直接赋值
df1.index = ['a', 'b', 'c', 6]
df1.index
Index(['a', 'b', 'c', 6], dtype='object')

强行更新索引

reindex则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行/列,同时进行缺失值填充操作

df.reindex(

labels : 类数组结构的数值,将按此数值重建索引,非必需

axis : 针对哪个轴进行重建

('index', 'columns') or number (0, 1).

copy = True : 建立新对象而不是直接更改原df/series

level : 考虑被重建的索引级别

缺失数据的处理方式

method : 针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需

    pad / ffill: 用前面的有效数值填充

    backfill / bfill: 用后面的有效数值填充

    nearest: 使用最接近的数值进行填充

fill_value = np.NaN : 将缺失值用什么数值替代

limit = None : 向前/向后填充时的最大步长

)

df2.reindex([1,2,99,101])
类型 学校名称 名次 总分 所在省份 所在城市 办学方向 主管部门
idx
1 理工 清华大学 2.0 98.50 北京 北京市 中国研究型 教育部
2 综合 复旦大学 3.0 82.79 上海 上海市 中国研究型 教育部
99 综合 山西大学 100.0 63.29 山西 太原市 区域研究型 山西省
101 NaN NaN NaN NaN NaN NaN NaN NaN
df2.reindex([1,2,99,101], method = 'ffill' )
类型 学校名称 名次 总分 所在省份 所在城市 办学方向 主管部门
idx
1 理工 清华大学 2 98.50 北京 北京市 中国研究型 教育部
2 综合 复旦大学 3 82.79 上海 上海市 中国研究型 教育部
99 综合 山西大学 100 63.29 山西 太原市 区域研究型 山西省
101 综合 山西大学 100 63.29 山西 太原市 区域研究型 山西省
df2.reindex([1,2,99,101], fill_value= "不知道" )
类型 学校名称 名次 总分 所在省份 所在城市 办学方向 主管部门
idx
1 理工 清华大学 2 98.5 北京 北京市 中国研究型 教育部
2 综合 复旦大学 3 82.79 上海 上海市 中国研究型 教育部
99 综合 山西大学 100 63.29 山西 太原市 区域研究型 山西省
101 不知道 不知道 不知道 不知道 不知道 不知道 不知道 不知道
df2.reindex([1,2,99,101], fill_value= "不知道" ).dtypes
类型      object
学校名称    object
名次      object
总分      object
所在省份    object
所在城市    object
办学方向    object
主管部门    object
dtype: object

实战:为PM2.5数据建立索引

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_new = pd.read_csv("PM25\Beijing_2012_HourlyPM2.5_created20140325.csv",
                         encoding ="gbk", index_col ='Value',skiprows=3 )
bj2012_new
Site Parameter Date (LST) Year Month Day Hour Unit Duration QC Name
Value
303 Beijing PM2.5 2012-1-1 0:00 2012 1 1 0 礸/mg? 1 Hr Valid
215 Beijing PM2.5 2012-1-1 1:00 2012 1 1 1 礸/mg? 1 Hr Valid
222 Beijing PM2.5 2012-1-1 2:00 2012 1 1 2 礸/mg? 1 Hr Valid
85 Beijing PM2.5 2012-1-1 3:00 2012 1 1 3 礸/mg? 1 Hr Valid
38 Beijing PM2.5 2012-1-1 4:00 2012 1 1 4 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ... ...
131 Beijing PM2.5 2012-12-31 19:00 2012 12 31 19 礸/mg?1 Hr Valid NaN
113 Beijing PM2.5 2012-12-31 20:00 2012 12 31 20 礸/mg?1 Hr Valid NaN
45 Beijing PM2.5 2012-12-31 21:00 2012 12 31 21 礸/mg?1 Hr Valid NaN
39 Beijing PM2.5 2012-12-31 22:00 2012 12 31 22 礸/mg?1 Hr Valid NaN
35 Beijing PM2.5 2012-12-31 23:00 2012 12 31 23 礸/mg?1 Hr Valid NaN

8784 rows × 10 columns

bj2012_new2 = bj2012.set_index('Date (LST)', drop = True)
bj2012_new2
Site Parameter Year Month Day Hour Value Unit Duration QC Name
Date (LST)
2012-1-1 0:00 Beijing PM2.5 2012 1 1 0 303 礸/mg? 1 Hr Valid
2012-1-1 1:00 Beijing PM2.5 2012 1 1 1 215 礸/mg? 1 Hr Valid
2012-1-1 2:00 Beijing PM2.5 2012 1 1 2 222 礸/mg? 1 Hr Valid
2012-1-1 3:00 Beijing PM2.5 2012 1 1 3 85 礸/mg? 1 Hr Valid
2012-1-1 4:00 Beijing PM2.5 2012 1 1 4 38 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ... ...
2012-12-31 19:00 Beijing PM2.5 2012 12 31 19 131 礸/mg?1 Hr Valid NaN
2012-12-31 20:00 Beijing PM2.5 2012 12 31 20 113 礸/mg?1 Hr Valid NaN
2012-12-31 21:00 Beijing PM2.5 2012 12 31 21 45 礸/mg?1 Hr Valid NaN
2012-12-31 22:00 Beijing PM2.5 2012 12 31 22 39 礸/mg?1 Hr Valid NaN
2012-12-31 23:00 Beijing PM2.5 2012 12 31 23 35 礸/mg?1 Hr Valid NaN

8784 rows × 10 columns

bj2012.reset_index(inplace = True) # 将索引全部还原为变量
bj2012
Year Month Day Hour Site Parameter Date (LST) Value Unit Duration QC Name
0 2012 1 1 0 Beijing PM2.5 2012-1-1 0:00 303 礸/mg? 1 Hr Valid
1 2012 1 1 1 Beijing PM2.5 2012-1-1 1:00 215 礸/mg? 1 Hr Valid
2 2012 1 1 2 Beijing PM2.5 2012-1-1 2:00 222 礸/mg? 1 Hr Valid
3 2012 1 1 3 Beijing PM2.5 2012-1-1 3:00 85 礸/mg? 1 Hr Valid
4 2012 1 1 4 Beijing PM2.5 2012-1-1 4:00 38 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ... ... ...
8779 2012 12 31 19 Beijing PM2.5 2012-12-31 19:00 131 礸/mg?1 Hr Valid NaN
8780 2012 12 31 20 Beijing PM2.5 2012-12-31 20:00 113 礸/mg?1 Hr Valid NaN
8781 2012 12 31 21 Beijing PM2.5 2012-12-31 21:00 45 礸/mg?1 Hr Valid NaN
8782 2012 12 31 22 Beijing PM2.5 2012-12-31 22:00 39 礸/mg?1 Hr Valid NaN
8783 2012 12 31 23 Beijing PM2.5 2012-12-31 23:00 35 礸/mg?1 Hr Valid NaN

8784 rows × 11 columns

bj2012_new2 = bj2012.set_index(['Year','Month','Day','Hour'], drop = True)
bj2012_new2
Site Parameter Date (LST) Value Unit Duration QC Name
Year Month Day Hour
2012 1 1 0 Beijing PM2.5 2012-1-1 0:00 303 礸/mg? 1 Hr Valid
1 Beijing PM2.5 2012-1-1 1:00 215 礸/mg? 1 Hr Valid
2 Beijing PM2.5 2012-1-1 2:00 222 礸/mg? 1 Hr Valid
3 Beijing PM2.5 2012-1-1 3:00 85 礸/mg? 1 Hr Valid
4 Beijing PM2.5 2012-1-1 4:00 38 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ...
12 31 19 Beijing PM2.5 2012-12-31 19:00 131 礸/mg?1 Hr Valid NaN
20 Beijing PM2.5 2012-12-31 20:00 113 礸/mg?1 Hr Valid NaN
21 Beijing PM2.5 2012-12-31 21:00 45 礸/mg?1 Hr Valid NaN
22 Beijing PM2.5 2012-12-31 22:00 39 礸/mg?1 Hr Valid NaN
23 Beijing PM2.5 2012-12-31 23:00 35 礸/mg?1 Hr Valid NaN

8784 rows × 7 columns

bj2012_new2.index.names = ['年', '月','日','小时'] # None代表无名称
bj2012_new2
Site Parameter Date (LST) Value Unit Duration QC Name
小时
2012 1 1 0 Beijing PM2.5 2012-1-1 0:00 303 礸/mg? 1 Hr Valid
1 Beijing PM2.5 2012-1-1 1:00 215 礸/mg? 1 Hr Valid
2 Beijing PM2.5 2012-1-1 2:00 222 礸/mg? 1 Hr Valid
3 Beijing PM2.5 2012-1-1 3:00 85 礸/mg? 1 Hr Valid
4 Beijing PM2.5 2012-1-1 4:00 38 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ...
12 31 19 Beijing PM2.5 2012-12-31 19:00 131 礸/mg?1 Hr Valid NaN
20 Beijing PM2.5 2012-12-31 20:00 113 礸/mg?1 Hr Valid NaN
21 Beijing PM2.5 2012-12-31 21:00 45 礸/mg?1 Hr Valid NaN
22 Beijing PM2.5 2012-12-31 22:00 39 礸/mg?1 Hr Valid NaN
23 Beijing PM2.5 2012-12-31 23:00 35 礸/mg?1 Hr Valid NaN

8784 rows × 7 columns

3.案例行的基本操作

3.1. 案例排序

3.1.1用索引排序

df.sort_index(

axis = 0 : 针对行/列方向排序,{0 or ‘index’, 1 or ‘columns’}

level : (多重索引时)指定用于排序的级别顺序号/名称

ascending = True : 是否为升序排列,多列时以表形式提供,默认为升序

inplace = False

na_position = ‘last’: 缺失值的排列顺序,first/last

ignore_index = False : 如果忽略原有索引,则索引会被重置为0, 1, …, n - 1,1.0.0版新增

key = None : 在排序前对索引值应用指定的key函数,1.1.0版新增

)

df2 = pd.read_excel("高校信息.xlsx", sheet_name = 0)
df2.set_index(['类型','学校名称'], inplace = True)
df2
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 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 × 6 columns

df2 = pd.read_excel("高校信息.xlsx", sheet_name = 0)
df2.set_index(['类型','学校名称'], inplace = True)
df2
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 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 × 6 columns

df2.sort_index()
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
农林 中国农业大学 32 68.05 北京 北京市 行业特色研究型 教育部
北京林业大学 88 63.79 北京 北京市 行业特色研究型 教育部
华中农业大学 49 65.77 湖北 武汉市 行业特色研究型 教育部
华南农业大学 95 63.64 广东 广州市 区域特色研究型 广东省
南京农业大学 46 65.90 江苏 南京市 行业特色研究型 教育部
... ... ... ... ... ... ... ...
财经 上海财经大学 64 64.96 上海 上海市 行业特色研究型 教育部
中南财经政法大学 76 64.32 湖北 武汉市 行业特色研究型 教育部
中央财经大学 82 63.99 北京 北京市 区域特色研究型 教育部
对外经济贸易大学 90 63.77 北京 北京市 区域特色研究型 教育部
西南财经大学 77 64.27 四川 成都市 区域特色研究型 教育部

100 rows × 6 columns

df2.sort_index(ascending = [True, False])
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
农林 西北农林科技大学 65 64.92 陕西 咸阳市 行业特色研究型 教育部
南京农业大学 46 65.90 江苏 南京市 行业特色研究型 教育部
华南农业大学 95 63.64 广东 广州市 区域特色研究型 广东省
华中农业大学 49 65.77 湖北 武汉市 行业特色研究型 教育部
北京林业大学 88 63.79 北京 北京市 行业特色研究型 教育部
... ... ... ... ... ... ... ...
财经 西南财经大学 77 64.27 四川 成都市 区域特色研究型 教育部
对外经济贸易大学 90 63.77 北京 北京市 区域特色研究型 教育部
中央财经大学 82 63.99 北京 北京市 区域特色研究型 教育部
中南财经政法大学 76 64.32 湖北 武汉市 行业特色研究型 教育部
上海财经大学 64 64.96 上海 上海市 行业特色研究型 教育部

100 rows × 6 columns

df2.sort_index(level = '学校名称')
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 上海交通大学 7 81.76 上海 上海市 中国研究型 教育部
上海大学 75 64.41 上海 上海市 区域研究型 上海市
财经 上海财经大学 64 64.96 上海 上海市 行业特色研究型 教育部
理工 东北大学 26 69.55 辽宁 沈阳市 中国研究型 教育部
师范 东北师范大学 40 66.50 吉林 长春市 行业特色研究型 教育部
... ... ... ... ... ... ... ...
综合 重庆大学 27 69.54 重庆 重庆市 中国研究型 教育部
理工 长安大学 42 66.08 陕西 西安市 行业特色研究型 教育部
师范 陕西师范大学 86 63.88 陕西 西安市 区域特色研究型 教育部
医药 首都医科大学 98 63.32 北京 北京市 区域特色研究型 北京市
师范 首都师范大学 92 63.73 北京 北京市 区域特色研究型 北京市

100 rows × 6 columns

df2.sort_index(level = '学校名称', ignore_index = True)
名次 总分 所在省份 所在城市 办学方向 主管部门
0 7 81.76 上海 上海市 中国研究型 教育部
1 75 64.41 上海 上海市 区域研究型 上海市
2 64 64.96 上海 上海市 行业特色研究型 教育部
3 26 69.55 辽宁 沈阳市 中国研究型 教育部
4 40 66.50 吉林 长春市 行业特色研究型 教育部
... ... ... ... ... ... ...
95 27 69.54 重庆 重庆市 中国研究型 教育部
96 42 66.08 陕西 西安市 行业特色研究型 教育部
97 86 63.88 陕西 西安市 区域特色研究型 教育部
98 98 63.32 北京 北京市 区域特色研究型 北京市
99 92 63.73 北京 北京市 区域特色研究型 北京市

100 rows × 6 columns

# 只使用学校名称的前两个字排序
df2.sort_index(level = '学校名称', key = lambda x: x.str[:2])
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 上海交通大学 7 81.76 上海 上海市 中国研究型 教育部
上海大学 75 64.41 上海 上海市 区域研究型 上海市
财经 上海财经大学 64 64.96 上海 上海市 行业特色研究型 教育部
师范 东北师范大学 40 66.50 吉林 长春市 行业特色研究型 教育部
理工 东北大学 26 69.55 辽宁 沈阳市 中国研究型 教育部
... ... ... ... ... ... ... ...
综合 重庆大学 27 69.54 重庆 重庆市 中国研究型 教育部
理工 长安大学 42 66.08 陕西 西安市 行业特色研究型 教育部
师范 陕西师范大学 86 63.88 陕西 西安市 区域特色研究型 教育部
医药 首都医科大学 98 63.32 北京 北京市 区域特色研究型 北京市
师范 首都师范大学 92 63.73 北京 北京市 区域特色研究型 北京市

100 rows × 6 columns

3.2 用变量值排序

df.sort_values(

by : 指定用于排序的变量名,多列时以列表形式提供

axis = 0 : 针对行/列方向排序,{0 or ‘index’, 1 or ‘columns’}

ascending = True : 是否为升序排列

inplace = False :

na_position = ‘last’: 缺失值的排列顺序,first/last

ignore_index = False : 如果忽略原有索引,则索引会被重置为0, 1, …, n - 1,1.0.0版新增

key = None : 在排序前对索引值应用指定的key函数,1.1.0版新增

)

df2.sort_values(['所在省份','所在城市'], 0, False)
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
理工 哈尔滨工业大学 21 72.72 黑龙江 哈尔滨市 中国研究型 工业和信息化部
哈尔滨工程大学 57 65.41 黑龙江 哈尔滨市 行业特色研究型 工业和信息化部
综合 西安交通大学 17 73.56 陕西 西安市 中国研究型 教育部
理工 西北工业大学 35 67.77 陕西 西安市 中国研究型 工业和信息化部
长安大学 42 66.08 陕西 西安市 行业特色研究型 教育部
... ... ... ... ... ... ...
华东理工大学 48 65.79 上海 上海市 行业特色研究型 教育部
财经 上海财经大学 64 64.96 上海 上海市 行业特色研究型 教育部
综合 上海大学 75 64.41 上海 上海市 区域研究型 上海市
理工 东华大学 79 64.24 上海 上海市 行业特色研究型 教育部
医药 第二军医大学 71 64.74 上海 上海 行业特色研究型

100 rows × 6 columns

3.3 案例筛选

筛选操作的实质:基于T/F值进行筛选

3.3.1按照绝对位置进行筛选(此时不用过于考虑索引)

df.iloc

意为integer-location,即按照行列序号进行检索

可以同时指定行列,指定列时,需要先用","表明为列序号,前行后列

df.iat

本质上和iloc是一回事,可以看作别名

df2.iloc[0:3] # 不包括右侧界值,切片本身代表列表,如果再加上[]会报错
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
理工 清华大学 2 98.50 北京 北京市 中国研究型 教育部
综合 复旦大学 3 82.79 上海 上海市 中国研究型 教育部
df2.iloc[[0,3]] 
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
武汉大学 4 82.43 湖北 武汉市 中国研究型 教育部
df2.iloc[:,0:3] # 只指定列范围,不包括右侧边界,前面的:不能省略,否则会认为这是空参
名次 总分 所在省份
类型 学校名称
综合 北京大学 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 × 3 columns

df2.iloc[1:4,[0,3]] # 同时指定行列范围
名次 所在城市
类型 学校名称
理工 清华大学 2 北京市
综合 复旦大学 3 上海市
武汉大学 4 武汉市

3.3.2 按照索引值进行筛选

此时要注意进行增删改查操作后的索引会乱的问题,使用其可以用来实现字符串的查找

df.loc

按照给出的索引值进行筛选

筛选范围包括上下界值

出现未知索引值时会报错

df.at

本质上和loc是一回事,可以看作别名

df2 = pd.read_excel("高校信息.xlsx",
                    sheet_name = "full", index_col = '名次')
df2
学校名称 总分 类型 所在省份 所在城市 办学方向 主管部门
名次
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

df2.loc[2:4] # 切片本身就是一个列表,因此不需要加[]
学校名称 总分 类型 所在省份 所在城市 办学方向 主管部门
名次
2 清华大学 98.50 理工 北京 北京市 中国研究型 教育部
3 复旦大学 82.79 综合 上海 上海市 中国研究型 教育部
4 武汉大学 82.43 综合 湖北 武汉市 中国研究型 教育部
df2 = pd.read_excel("高校信息.xlsx",
                    sheet_name = "full", index_col = '学校名称')
df2
名次 总分 类型 所在省份 所在城市 办学方向 主管部门
学校名称
北京大学 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

df2.loc['北京大学':'复旦大学']
名次 总分 类型 所在省份 所在城市 办学方向 主管部门
学校名称
北京大学 1 100.00 综合 北京 北京市 中国研究型 教育部
清华大学 2 98.50 理工 北京 北京市 中国研究型 教育部
复旦大学 3 82.79 综合 上海 上海市 中国研究型 教育部
df2.loc[['北京大学', '复旦大学']]
名次 总分 类型 所在省份 所在城市 办学方向 主管部门
学校名称
北京大学 1 100.00 综合 北京 北京市 中国研究型 教育部
复旦大学 3 82.79 综合 上海 上海市 中国研究型 教育部
df2.loc[['北京大学','复旦大学'],['名次','所在省份','总分']]
名次 所在省份 总分
学校名称
北京大学 1 北京 100.00
复旦大学 3 上海 82.79

针对多重索引的行筛选命令

df.xs(key, axis=0, level=None, drop_level=True)
(指定具体检索用的多重索引级别)

df.IndexSlice #目前不推荐使用

df2 = pd.read_excel("高校信息.xlsx",
                    sheet_name = "full", index_col = [3, 1])
df2
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 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 × 6 columns

df2.loc[['财经','师范']] # 只使用最高级别的索引检索,进行筛选
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
师范 北京师范大学 15 74.75 北京 北京市 中国研究型 教育部
华东师范大学 28 69.52 上海 上海市 中国研究型 教育部
华中师范大学 34 67.92 湖北 武汉市 中国研究型 教育部
东北师范大学 40 66.50 吉林 长春市 行业特色研究型 教育部
南京师范大学 50 65.71 江苏 南京市 区域特色研究型 江苏省
... ... ... ... ... ... ... ...
财经 中央财经大学 82 63.99 北京 北京市 区域特色研究型 教育部
师范 陕西师范大学 86 63.88 陕西 西安市 区域特色研究型 教育部
财经 对外经济贸易大学 90 63.77 北京 北京市 区域特色研究型 教育部
师范 首都师范大学 92 63.73 北京 北京市 区域特色研究型 北京市
浙江师范大学 96 63.37 浙江 金华市 区域特色研究型 浙江省

16 rows × 6 columns

df2.loc[[('财经','中央财经大学'),('综合','北京大学')]] # 完整检索,注意()元组
#格式不要错
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
财经 中央财经大学 82 63.99 北京 北京市 区域特色研究型 教育部
综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
df2.xs('中央财经大学', level = 1, drop_level = False)
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
财经 中央财经大学 82 63.99 北京 北京市 区域特色研究型 教育部

3.3直接进行条件筛选

按照数据范围进行筛选

df[筛选条件]

df2[df2.名次 > 10] 
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 吉林大学 11 76.01 吉林 长春市 中国研究型 教育部
理工 中国科学技术大学 12 75.14 安徽 合肥市 中国研究型 中国科学院
华中科技大学 13 75.12 湖北 武汉市 中国研究型 教育部
综合 四川大学 14 74.99 四川 成都市 中国研究型 教育部
师范 北京师范大学 15 74.75 北京 北京市 中国研究型 教育部
... ... ... ... ... ... ...
浙江师范大学 96 63.37 浙江 金华市 区域特色研究型 浙江省
综合 安徽大学 97 63.34 安徽 合肥市 区域研究型 安徽省
医药 首都医科大学 98 63.32 北京 北京市 区域特色研究型 北京市
综合 江南大学 99 63.31 江苏 无锡市 区域特色研究型 教育部
山西大学 100 63.29 山西 太原市 区域研究型 山西省

90 rows × 6 columns

列表筛选

df.isin(values)

返回结果为相应的位置是否匹配给出的values

values为序列:对应每个具体值

values为字典:对应各个变量名称

values为数据框:同时对应数值和变量名称

df2.loc[df2.名次.isin([1, 3, 5])]#[]内是给出索引,后再用引用索引,不能用iloc哦
名次 学校名称 总分 类型 所在省份 所在城市 办学方向 主管部门
0 1 北京大学 100.00 综合 北京 北京市 中国研究型 教育部
2 3 复旦大学 82.79 综合 上海 上海市 中国研究型 教育部
4 5 浙江大学 82.38 综合 浙江 杭州市 中国研究型 教育部
df2[df2.名次.isin([1, 3, 5])]
名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
复旦大学 3 82.79 上海 上海市 中国研究型 教育部
浙江大学 5 82.38 浙江 杭州市 中国研究型 教育部
df2[df2.所在省份.isin(['北京','上海'])]

名次 总分 所在省份 所在城市 办学方向 主管部门
类型 学校名称
综合 北京大学 1 100.00 北京 北京市 中国研究型 教育部
理工 清华大学 2 98.50 北京 北京市 中国研究型 教育部
综合 复旦大学 3 82.79 上海 上海市 中国研究型 教育部
中国人民大学 6 81.98 北京 北京市 中国研究型 教育部
上海交通大学 7 81.76 上海 上海市 中国研究型 教育部
... ... ... ... ... ... ... ...
民族 中央民族大学 89 63.78 北京 北京市 行业特色研究型 国家民委
财经 对外经济贸易大学 90 63.77 北京 北京市 区域特色研究型 教育部
师范 首都师范大学 92 63.73 北京 北京市 区域特色研究型 北京市
理工 华北电力大学 93 63.66 北京 北京市 区域特色研究型 教育部
医药 首都医科大学 98 63.32 北京 北京市 区域特色研究型 北京市

31 rows × 6 columns

df2 = pd.read_excel("高校信息.xlsx",
                    sheet_name = "full", index_col = '类型')
df2[df2.index.isin(['财经', '师范'])]
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
师范 15 北京师范大学 74.75 北京 北京市 中国研究型 教育部
师范 28 华东师范大学 69.52 上海 上海市 中国研究型 教育部
师范 34 华中师范大学 67.92 湖北 武汉市 中国研究型 教育部
师范 40 东北师范大学 66.50 吉林 长春市 行业特色研究型 教育部
师范 50 南京师范大学 65.71 江苏 南京市 区域特色研究型 江苏省
... ... ... ... ... ... ... ...
财经 82 中央财经大学 63.99 北京 北京市 区域特色研究型 教育部
师范 86 陕西师范大学 63.88 陕西 西安市 区域特色研究型 教育部
财经 90 对外经济贸易大学 63.77 北京 北京市 区域特色研究型 教育部
师范 92 首都师范大学 63.73 北京 北京市 区域特色研究型 北京市
师范 96 浙江师范大学 63.37 浙江 金华市 区域特色研究型 浙江省

16 rows × 7 columns

df2[(df2.名次 > 10) & (df2.名次 < 90)] # 必须使用(),并且用&连接
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
综合 11 吉林大学 76.01 吉林 长春市 中国研究型 教育部
理工 12 中国科学技术大学 75.14 安徽 合肥市 中国研究型 中国科学院
理工 13 华中科技大学 75.12 湖北 武汉市 中国研究型 教育部
综合 14 四川大学 74.99 四川 成都市 中国研究型 教育部
师范 15 北京师范大学 74.75 北京 北京市 中国研究型 教育部
... ... ... ... ... ... ... ...
综合 83 广西大学 63.89 广西 南宁市 区域研究型 广西壮族自治区
师范 86 陕西师范大学 63.88 陕西 西安市 区域特色研究型 教育部
综合 87 深圳大学 63.86 广东 深圳市 区域研究型 广东省
农林 88 北京林业大学 63.79 北京 北京市 行业特色研究型 教育部
民族 89 中央民族大学 63.78 北京 北京市 行业特色研究型 国家民委

79 rows × 7 columns

用类SQL语句进行筛选

df.query(

expr : 类SQL语句表达式

( 可以使用前缀’@'引用环境变量
等号为==,而不是=
注意:目前还不支持like语句
)

inplace = False : 是否直接替换原数据框

)

用法举例:

query(’(a < b) & (b < c)’)

如果索引没有名称,df.query(‘index < b < c’)

可以进行多重索引的指定,如df.query(“code==‘600801’”)

df2.query("名次 >10 and 名次 < 90 and 类型 != '综合'")
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
理工 12 中国科学技术大学 75.14 安徽 合肥市 中国研究型 中国科学院
理工 13 华中科技大学 75.12 湖北 武汉市 中国研究型 教育部
师范 15 北京师范大学 74.75 北京 北京市 中国研究型 教育部
理工 19 同济大学 72.85 上海 上海市 中国研究型 教育部
理工 20 天津大学 72.81 天津 天津市 中国研究型 教育部
... ... ... ... ... ... ... ...
理工 83 北京工业大学 63.89 北京 北京市 区域研究型 北京市
理工 83 福州大学 63.89 福建 福州市 区域研究型 福建省
师范 86 陕西师范大学 63.88 陕西 西安市 区域特色研究型 教育部
农林 88 北京林业大学 63.79 北京 北京市 行业特色研究型 教育部
民族 89 中央民族大学 63.78 北京 北京市 行业特色研究型 国家民委

58 rows × 7 columns

limit = 5
df2.query("名次<=@limit & 类型 == '综合'")
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
综合 1 北京大学 100.00 北京 北京市 中国研究型 教育部
综合 3 复旦大学 82.79 上海 上海市 中国研究型 教育部
综合 4 武汉大学 82.43 湖北 武汉市 中国研究型 教育部
综合 5 浙江大学 82.38 浙江 杭州市 中国研究型 教育部

实战:筛选数据中所需的案例

df2
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
综合 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

df2.query("总分 < 70 and 主管部门 == '教育部'")
名次 学校名称 总分 所在省份 所在城市 办学方向 主管部门
类型
理工 26 东北大学 69.55 辽宁 沈阳市 中国研究型 教育部
综合 27 重庆大学 69.54 重庆 重庆市 中国研究型 教育部
师范 28 华东师范大学 69.52 上海 上海市 中国研究型 教育部
理工 29 大连理工大学 68.84 辽宁 大连市 中国研究型 教育部
理工 31 华南理工大学 68.47 广东 广州市 中国研究型 教育部
... ... ... ... ... ... ... ...
师范 86 陕西师范大学 63.88 陕西 西安市 区域特色研究型 教育部
农林 88 北京林业大学 63.79 北京 北京市 行业特色研究型 教育部
财经 90 对外经济贸易大学 63.77 北京 北京市 区域特色研究型 教育部
理工 93 华北电力大学 63.66 北京 北京市 区域特色研究型 教育部
综合 99 江南大学 63.31 江苏 无锡市 区域特色研究型 教育部

41 rows × 7 columns

df2.reset_index(inplace = True) # 将索引全部还原为变量
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

df_new = df2.set_index('主管部门')
df_new
类型 名次 学校名称 总分 所在省份 所在城市 办学方向
主管部门
教育部 综合 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

df_new.query("总分 < 70 and 主管部门 == '教育部'")
类型 名次 学校名称 总分 所在省份 所在城市 办学方向
主管部门
教育部 理工 26 东北大学 69.55 辽宁 沈阳市 中国研究型
教育部 综合 27 重庆大学 69.54 重庆 重庆市 中国研究型
教育部 师范 28 华东师范大学 69.52 上海 上海市 中国研究型
教育部 理工 29 大连理工大学 68.84 辽宁 大连市 中国研究型
教育部 理工 31 华南理工大学 68.47 广东 广州市 中国研究型
... ... ... ... ... ... ... ...
教育部 师范 86 陕西师范大学 63.88 陕西 西安市 区域特色研究型
教育部 农林 88 北京林业大学 63.79 北京 北京市 行业特色研究型
教育部 财经 90 对外经济贸易大学 63.77 北京 北京市 区域特色研究型
教育部 理工 93 华北电力大学 63.66 北京 北京市 区域特色研究型
教育部 综合 99 江南大学 63.31 江苏 无锡市 区域特色研究型

41 rows × 7 columns

bj2012
Year Month Day Hour Site Parameter Date (LST) Value Unit Duration QC Name
0 2012 1 1 0 Beijing PM2.5 2012-1-1 0:00 303 礸/mg? 1 Hr Valid
1 2012 1 1 1 Beijing PM2.5 2012-1-1 1:00 215 礸/mg? 1 Hr Valid
2 2012 1 1 2 Beijing PM2.5 2012-1-1 2:00 222 礸/mg? 1 Hr Valid
3 2012 1 1 3 Beijing PM2.5 2012-1-1 3:00 85 礸/mg? 1 Hr Valid
4 2012 1 1 4 Beijing PM2.5 2012-1-1 4:00 38 礸/mg? 1 Hr Valid
... ... ... ... ... ... ... ... ... ... ... ...
8779 2012 12 31 19 Beijing PM2.5 2012-12-31 19:00 131 礸/mg?1 Hr Valid NaN
8780 2012 12 31 20 Beijing PM2.5 2012-12-31 20:00 113 礸/mg?1 Hr Valid NaN
8781 2012 12 31 21 Beijing PM2.5 2012-12-31 21:00 45 礸/mg?1 Hr Valid NaN
8782 2012 12 31 22 Beijing PM2.5 2012-12-31 22:00 39 礸/mg?1 Hr Valid NaN
8783 2012 12 31 23 Beijing PM2.5 2012-12-31 23:00 35 礸/mg?1 Hr Valid NaN

8784 rows × 11 columns

bj2012.query("Value >100 and Month == 10 and Hour>9 and Hour <15 ")#注意是==号
Year Month Day Hour Site Parameter Date (LST) Value Unit Duration QC Name
6610 2012 10 2 10 Beijing PM2.5 2012-10-2 10:00 140 礸/mg?1 Hr Valid NaN
6611 2012 10 2 11 Beijing PM2.5 2012-10-2 11:00 145 礸/mg?1 Hr Valid NaN
6612 2012 10 2 12 Beijing PM2.5 2012-10-2 12:00 145 礸/mg?1 Hr Valid NaN
6613 2012 10 2 13 Beijing PM2.5 2012-10-2 13:00 164 礸/mg?1 Hr Valid NaN
6614 2012 10 2 14 Beijing PM2.5 2012-10-2 14:00 169 礸/mg?1 Hr Valid NaN
... ... ... ... ... ... ... ... ... ... ... ...
7190 2012 10 26 14 Beijing PM2.5 2012-10-26 14:00 293 礸/mg?1 Hr Valid NaN
7210 2012 10 27 10 Beijing PM2.5 2012-10-27 10:00 222 礸/mg?1 Hr Valid NaN
7211 2012 10 27 11 Beijing PM2.5 2012-10-27 11:00 232 礸/mg?1 Hr Valid NaN
7212 2012 10 27 12 Beijing PM2.5 2012-10-27 12:00 166 礸/mg?1 Hr Valid NaN
7213 2012 10 27 13 Beijing PM2.5 2012-10-27 13:00 105 礸/mg?1 Hr Valid NaN

49 rows × 11 columns

你可能感兴趣的:(数据分析,python,大数据,pandas)