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
名次学校名称总分类型所在省份所在城市办学方向主管部门
01北京大学100.00综合北京北京市中国研究型教育部
12清华大学98.50理工北京北京市中国研究型教育部
23复旦大学82.79综合上海上海市中国研究型教育部
34武汉大学82.43综合湖北武汉市中国研究型教育部
45浙江大学82.38综合浙江杭州市中国研究型教育部
...........................
9596浙江师范大学63.37师范浙江金华市区域特色研究型浙江省
9697安徽大学63.34综合安徽合肥市区域研究型安徽省
9798首都医科大学63.32医药北京北京市区域特色研究型北京市
9899江南大学63.31综合江苏无锡市区域特色研究型教育部
99100山西大学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()
<class 'pandas.core.frame.DataFrame'>
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条
名次学校名称总分类型所在省份所在城市办学方向主管部门
01北京大学100.00综合北京北京市中国研究型教育部
12清华大学98.50理工北京北京市中国研究型教育部
23复旦大学82.79综合上海上海市中国研究型教育部
34武汉大学82.43综合湖北武汉市中国研究型教育部
45浙江大学82.38综合浙江杭州市中国研究型教育部
56中国人民大学81.98综合北京北京市中国研究型教育部
67上海交通大学81.76综合上海上海市中国研究型教育部
78南京大学80.43综合江苏南京市中国研究型教育部
89国防科学技术大学80.31理工湖南长沙市中国研究型中央军委
910中山大学76.46综合广东广州市中国研究型教育部
# 浏览最后几条记录
df2.tail(3)# 默认5条
名次学校名称总分类型所在省份所在城市办学方向主管部门
9798首都医科大学63.32医药北京北京市区域特色研究型北京市
9899江南大学63.31综合江苏无锡市区域特色研究型教育部
99100山西大学63.29综合山西太原市区域研究型山西省

1.2 重命名变量列

直接修改columns属性

df.columns = 新的名称list

# 给出变量名/列名
df2.columns
Index(['名次', '学校名称', '总分', '类型', '所在省份', '所在城市', '办学方向', '主管部门'], dtype='object')
df2.columns = ['名次2', '学校名称2', '总分', '类型',
               '所在省份', '所在城市', '办学方向', '主管部门']
#列表数必须全部对应,否则会报错
df2
名次2学校名称2总分类型所在省份所在城市办学方向主管部门
01北京大学100.00综合北京北京市中国研究型教育部
12清华大学98.50理工北京北京市中国研究型教育部
23复旦大学82.79综合上海上海市中国研究型教育部
34武汉大学82.43综合湖北武汉市中国研究型教育部
45浙江大学82.38综合浙江杭州市中国研究型教育部
...........................
9596浙江师范大学63.37师范浙江金华市区域特色研究型浙江省
9697安徽大学63.34综合安徽合肥市区域研究型安徽省
9798首都医科大学63.32医药北京北京市区域特色研究型北京市
9899江南大学63.31综合江苏无锡市区域特色研究型教育部
99100山西大学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总分类型所在省份所在城市办学方向主管部门
01北京大学100.00综合北京北京市中国研究型教育部
12清华大学98.50理工北京北京市中国研究型教育部
23复旦大学82.79综合上海上海市中国研究型教育部
34武汉大学82.43综合湖北武汉市中国研究型教育部
45浙江大学82.38综合浙江杭州市中国研究型教育部
...........................
9596浙江师范大学63.37师范浙江金华市区域特色研究型浙江省
9697安徽大学63.34综合安徽合肥市区域研究型安徽省
9798首都医科大学63.32医药北京北京市区域特色研究型北京市
9899江南大学63.31综合江苏无锡市区域特色研究型教育部
99100山西大学63.29综合山西太原市区域研究型山西省

100 rows × 8 columns

df2.rename(
    columns = {'名次2': '名次', '学校名称2':'学校名称'}, inplace = True
) 
df2#如果被替换的变量写错了,它不执行,并且也不报错,需要注意
名次学校名称总分类型所在省份所在城市办学方向主管部门
01北京大学100.00综合北京北京市中国研究型教育部
12清华大学98.50理工北京北京市中国研究型教育部
23复旦大学82.79综合上海上海市中国研究型教育部
34武汉大学82.43综合湖北武汉市中国研究型教育部
45浙江大学82.38综合浙江杭州市中国研究型教育部
...........................
9596浙江师范大学63.37师范浙江金华市区域特色研究型浙江省
9697安徽大学63.34综合安徽合肥市区域研究型安徽省
9798首都医科大学63.32医药北京北京市区域特色研究型北京市
9899江南大学63.31综合江苏无锡市区域特色研究型教育部
99100山西大学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[['名次','总分']]
名次总分
01100.00
1298.50
2382.79
3482.43
4582.38
.........
959663.37
969763.34
979863.32
989963.31
9910063.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
SiteParameterDate (LST)YearMonthDayHourValueUnitDurationQC Name
0BeijingPM2.52012-1-1 0:002012110303礸/mg?1 HrValid
1BeijingPM2.52012-1-1 1:002012111215礸/mg?1 HrValid
2BeijingPM2.52012-1-1 2:002012112222礸/mg?1 HrValid
3BeijingPM2.52012-1-1 3:00201211385礸/mg?1 HrValid
4BeijingPM2.52012-1-1 4:00201211438礸/mg?1 HrValid
....................................
8779BeijingPM2.52012-12-31 19:002012123119131礸/mg?1 HrValidNaN
8780BeijingPM2.52012-12-31 20:002012123120113礸/mg?1 HrValidNaN
8781BeijingPM2.52012-12-31 21:00201212312145礸/mg?1 HrValidNaN
8782BeijingPM2.52012-12-31 22:00201212312239礸/mg?1 HrValidNaN
8783BeijingPM2.52012-12-31 23:00201212312335礸/mg?1 HrValidNaN

8784 rows × 11 columns

bj2012.drop(columns = ['Parameter','Duration','QC Name'],inplace = True )
#之前执行了一次删除,在执行就会因为找不到而报错
bj2012
SiteDate (LST)YearMonthDayHourValueUnit
0Beijing2012-1-1 0:002012110303礸/mg?
1Beijing2012-1-1 1:002012111215礸/mg?
2Beijing2012-1-1 2:002012112222礸/mg?
3Beijing2012-1-1 3:00201211385礸/mg?
4Beijing2012-1-1 4:00201211438礸/mg?
...........................
8779Beijing2012-12-31 19:002012123119131礸/mg?1 Hr
8780Beijing2012-12-31 20:002012123120113礸/mg?1 Hr
8781Beijing2012-12-31 21:00201212312145礸/mg?1 Hr
8782Beijing2012-12-31 22:00201212312239礸/mg?1 Hr
8783Beijing2012-12-31 23:00201212312335礸/mg?1 Hr

8784 rows × 8 columns

bj2012.rename(
    columns = {'Date (LST)': '时间', 'Value':'数值'}, inplace = True
) 
bj2012
Site时间YearMonthDayHour数值Unit
0Beijing2012-1-1 0:002012110303礸/mg?
1Beijing2012-1-1 1:002012111215礸/mg?
2Beijing2012-1-1 2:002012112222礸/mg?
3Beijing2012-1-1 3:00201211385礸/mg?
4Beijing2012-1-1 4:00201211438礸/mg?
...........................
8779Beijing2012-12-31 19:002012123119131礸/mg?1 Hr
8780Beijing2012-12-31 20:002012123120113礸/mg?1 Hr
8781Beijing2012-12-31 21:00201212312145礸/mg?1 Hr
8782Beijing2012-12-31 22:00201212312239礸/mg?1 Hr
8783Beijing2012-12-31 23:00201212312335礸/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
var1var2var3var4
01.01testcons
11.02traincons
21.03testcons
51.04traincons

2.2 读入数据时建立索引

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

df2 = pd.read_csv("univ.csv", encoding ="gbk", index_col="学校名称" )
df2
名次总分类型所在省份所在城市办学方向主管部门
学校名称
北京大学1100.00综合北京北京市中国研究型教育部
清华大学298.50理工北京北京市中国研究型教育部
复旦大学382.79综合上海上海市中国研究型教育部
武汉大学482.43综合湖北武汉市中国研究型教育部
浙江大学582.38综合浙江杭州市中国研究型教育部
........................
浙江师范大学9663.37师范浙江金华市区域特色研究型浙江省
安徽大学9763.34综合安徽合肥市区域研究型安徽省
首都医科大学9863.32医药北京北京市区域特色研究型北京市
江南大学9963.31综合江苏无锡市区域特色研究型教育部
山西大学10063.29综合山西太原市区域研究型山西省

100 rows × 7 columns

# 生成复合索引
df2 = pd.read_csv("univ.csv", encoding ="gbk",
                  index_col=["类型", "学校名称"] )
df2
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
武汉大学482.43湖北武汉市中国研究型教育部
浙江大学582.38浙江杭州市中国研究型教育部
........................
师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
综合安徽大学9763.34安徽合肥市区域研究型安徽省
医药首都医科大学9863.32北京北京市区域特色研究型北京市
综合江南大学9963.31江苏无锡市区域特色研究型教育部
山西大学10063.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综合北京大学1100.00北京北京市中国研究型教育部
1理工清华大学298.50北京北京市中国研究型教育部
2综合复旦大学382.79上海上海市中国研究型教育部
3综合武汉大学482.43湖北武汉市中国研究型教育部
4综合浙江大学582.38浙江杭州市中国研究型教育部
...........................
95师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
96综合安徽大学9763.34安徽合肥市区域研究型安徽省
97医药首都医科大学9863.32北京北京市区域特色研究型北京市
98综合江南大学9963.31江苏无锡市区域特色研究型教育部
99综合山西大学10063.29山西太原市区域研究型山西省

100 rows × 8 columns

df_new = df2.set_index(['名次','学校名称'], drop = False)
df_new
类型学校名称名次总分所在省份所在城市办学方向主管部门
名次学校名称
1北京大学综合北京大学1100.00北京北京市中国研究型教育部
2清华大学理工清华大学298.50北京北京市中国研究型教育部
3复旦大学综合复旦大学382.79上海上海市中国研究型教育部
4武汉大学综合武汉大学482.43湖北武汉市中国研究型教育部
5浙江大学综合浙江大学582.38浙江杭州市中国研究型教育部
..............................
96浙江师范大学师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
97安徽大学综合安徽大学9763.34安徽合肥市区域研究型安徽省
98首都医科大学医药首都医科大学9863.32北京北京市区域特色研究型北京市
99江南大学综合江南大学9963.31江苏无锡市区域特色研究型教育部
100山西大学综合山西大学10063.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 = ['名次','所在省份']) # 保留一个作为索引
名次所在省份类型学校名称总分所在城市办学方向主管部门
01北京综合北京大学100.00北京市中国研究型教育部
12北京理工清华大学98.50北京市中国研究型教育部
23上海综合复旦大学82.79上海市中国研究型教育部
34湖北综合武汉大学82.43武汉市中国研究型教育部
45浙江综合浙江大学82.38杭州市中国研究型教育部
...........................
9596浙江师范浙江师范大学63.37金华市区域特色研究型浙江省
9697安徽综合安徽大学63.34合肥市区域研究型安徽省
9798北京医药首都医科大学63.32北京市区域特色研究型北京市
9899江苏综合江南大学63.31无锡市区域特色研究型教育部
99100山西综合山西大学63.29太原市区域研究型山西省

100 rows × 8 columns

df_new2.reset_index(inplace = True) # 将索引全部还原为变量
df_new2
名次所在省份类型学校名称总分所在城市办学方向主管部门
01北京综合北京大学100.00北京市中国研究型教育部
12北京理工清华大学98.50北京市中国研究型教育部
23上海综合复旦大学82.79上海市中国研究型教育部
34湖北综合武汉大学82.43武汉市中国研究型教育部
45浙江综合浙江大学82.38杭州市中国研究型教育部
...........................
9596浙江师范浙江师范大学63.37金华市区域特色研究型浙江省
9697安徽综合安徽大学63.34合肥市区域研究型安徽省
9798北京医药首都医科大学63.32北京市区域特色研究型北京市
9899江苏综合江南大学63.31无锡市区域特色研究型教育部
99100山西综合山西大学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.098.50北京北京市中国研究型教育部
2综合复旦大学3.082.79上海上海市中国研究型教育部
99综合山西大学100.063.29山西太原市区域研究型山西省
101NaNNaNNaNNaNNaNNaNNaNNaN
df2.reindex([1,2,99,101], method = 'ffill' )
类型学校名称名次总分所在省份所在城市办学方向主管部门
idx
1理工清华大学298.50北京北京市中国研究型教育部
2综合复旦大学382.79上海上海市中国研究型教育部
99综合山西大学10063.29山西太原市区域研究型山西省
101综合山西大学10063.29山西太原市区域研究型山西省
df2.reindex([1,2,99,101], fill_value= "不知道" )
类型学校名称名次总分所在省份所在城市办学方向主管部门
idx
1理工清华大学298.5北京北京市中国研究型教育部
2综合复旦大学382.79上海上海市中国研究型教育部
99综合山西大学10063.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
SiteParameterDate (LST)YearMonthDayHourValueUnitDurationQC Name
0BeijingPM2.52012-1-1 0:002012110303礸/mg?1 HrValid
1BeijingPM2.52012-1-1 1:002012111215礸/mg?1 HrValid
2BeijingPM2.52012-1-1 2:002012112222礸/mg?1 HrValid
3BeijingPM2.52012-1-1 3:00201211385礸/mg?1 HrValid
4BeijingPM2.52012-1-1 4:00201211438礸/mg?1 HrValid
....................................
8779BeijingPM2.52012-12-31 19:002012123119131礸/mg?1 HrValidNaN
8780BeijingPM2.52012-12-31 20:002012123120113礸/mg?1 HrValidNaN
8781BeijingPM2.52012-12-31 21:00201212312145礸/mg?1 HrValidNaN
8782BeijingPM2.52012-12-31 22:00201212312239礸/mg?1 HrValidNaN
8783BeijingPM2.52012-12-31 23:00201212312335礸/mg?1 HrValidNaN

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
SiteParameterDate (LST)YearMonthDayHourUnitDurationQC Name
Value
303BeijingPM2.52012-1-1 0:002012110礸/mg?1 HrValid
215BeijingPM2.52012-1-1 1:002012111礸/mg?1 HrValid
222BeijingPM2.52012-1-1 2:002012112礸/mg?1 HrValid
85BeijingPM2.52012-1-1 3:002012113礸/mg?1 HrValid
38BeijingPM2.52012-1-1 4:002012114礸/mg?1 HrValid
.................................
131BeijingPM2.52012-12-31 19:002012123119礸/mg?1 HrValidNaN
113BeijingPM2.52012-12-31 20:002012123120礸/mg?1 HrValidNaN
45BeijingPM2.52012-12-31 21:002012123121礸/mg?1 HrValidNaN
39BeijingPM2.52012-12-31 22:002012123122礸/mg?1 HrValidNaN
35BeijingPM2.52012-12-31 23:002012123123礸/mg?1 HrValidNaN

8784 rows × 10 columns

bj2012_new2 = bj2012.set_index('Date (LST)', drop = True)
bj2012_new2
SiteParameterYearMonthDayHourValueUnitDurationQC Name
Date (LST)
2012-1-1 0:00BeijingPM2.52012110303礸/mg?1 HrValid
2012-1-1 1:00BeijingPM2.52012111215礸/mg?1 HrValid
2012-1-1 2:00BeijingPM2.52012112222礸/mg?1 HrValid
2012-1-1 3:00BeijingPM2.5201211385礸/mg?1 HrValid
2012-1-1 4:00BeijingPM2.5201211438礸/mg?1 HrValid
.................................
2012-12-31 19:00BeijingPM2.52012123119131礸/mg?1 HrValidNaN
2012-12-31 20:00BeijingPM2.52012123120113礸/mg?1 HrValidNaN
2012-12-31 21:00BeijingPM2.5201212312145礸/mg?1 HrValidNaN
2012-12-31 22:00BeijingPM2.5201212312239礸/mg?1 HrValidNaN
2012-12-31 23:00BeijingPM2.5201212312335礸/mg?1 HrValidNaN

8784 rows × 10 columns

bj2012.reset_index(inplace = True) # 将索引全部还原为变量
bj2012
YearMonthDayHourSiteParameterDate (LST)ValueUnitDurationQC Name
02012110BeijingPM2.52012-1-1 0:00303礸/mg?1 HrValid
12012111BeijingPM2.52012-1-1 1:00215礸/mg?1 HrValid
22012112BeijingPM2.52012-1-1 2:00222礸/mg?1 HrValid
32012113BeijingPM2.52012-1-1 3:0085礸/mg?1 HrValid
42012114BeijingPM2.52012-1-1 4:0038礸/mg?1 HrValid
....................................
87792012123119BeijingPM2.52012-12-31 19:00131礸/mg?1 HrValidNaN
87802012123120BeijingPM2.52012-12-31 20:00113礸/mg?1 HrValidNaN
87812012123121BeijingPM2.52012-12-31 21:0045礸/mg?1 HrValidNaN
87822012123122BeijingPM2.52012-12-31 22:0039礸/mg?1 HrValidNaN
87832012123123BeijingPM2.52012-12-31 23:0035礸/mg?1 HrValidNaN

8784 rows × 11 columns

bj2012_new2 = bj2012.set_index(['Year','Month','Day','Hour'], drop = True)
bj2012_new2
SiteParameterDate (LST)ValueUnitDurationQC Name
YearMonthDayHour
2012110BeijingPM2.52012-1-1 0:00303礸/mg?1 HrValid
1BeijingPM2.52012-1-1 1:00215礸/mg?1 HrValid
2BeijingPM2.52012-1-1 2:00222礸/mg?1 HrValid
3BeijingPM2.52012-1-1 3:0085礸/mg?1 HrValid
4BeijingPM2.52012-1-1 4:0038礸/mg?1 HrValid
..............................
123119BeijingPM2.52012-12-31 19:00131礸/mg?1 HrValidNaN
20BeijingPM2.52012-12-31 20:00113礸/mg?1 HrValidNaN
21BeijingPM2.52012-12-31 21:0045礸/mg?1 HrValidNaN
22BeijingPM2.52012-12-31 22:0039礸/mg?1 HrValidNaN
23BeijingPM2.52012-12-31 23:0035礸/mg?1 HrValidNaN

8784 rows × 7 columns

bj2012_new2.index.names = ['年', '月','日','小时'] # None代表无名称
bj2012_new2
SiteParameterDate (LST)ValueUnitDurationQC Name
小时
2012110BeijingPM2.52012-1-1 0:00303礸/mg?1 HrValid
1BeijingPM2.52012-1-1 1:00215礸/mg?1 HrValid
2BeijingPM2.52012-1-1 2:00222礸/mg?1 HrValid
3BeijingPM2.52012-1-1 3:0085礸/mg?1 HrValid
4BeijingPM2.52012-1-1 4:0038礸/mg?1 HrValid
..............................
123119BeijingPM2.52012-12-31 19:00131礸/mg?1 HrValidNaN
20BeijingPM2.52012-12-31 20:00113礸/mg?1 HrValidNaN
21BeijingPM2.52012-12-31 21:0045礸/mg?1 HrValidNaN
22BeijingPM2.52012-12-31 22:0039礸/mg?1 HrValidNaN
23BeijingPM2.52012-12-31 23:0035礸/mg?1 HrValidNaN

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
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
武汉大学482.43湖北武汉市中国研究型教育部
浙江大学582.38浙江杭州市中国研究型教育部
........................
师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
综合安徽大学9763.34安徽合肥市区域研究型安徽省
医药首都医科大学9863.32北京北京市区域特色研究型北京市
综合江南大学9963.31江苏无锡市区域特色研究型教育部
山西大学10063.29山西太原市区域研究型山西省

100 rows × 6 columns

df2 = pd.read_excel("高校信息.xlsx", sheet_name = 0)
df2.set_index(['类型','学校名称'], inplace = True)
df2
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
武汉大学482.43湖北武汉市中国研究型教育部
浙江大学582.38浙江杭州市中国研究型教育部
........................
师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
综合安徽大学9763.34安徽合肥市区域研究型安徽省
医药首都医科大学9863.32北京北京市区域特色研究型北京市
综合江南大学9963.31江苏无锡市区域特色研究型教育部
山西大学10063.29山西太原市区域研究型山西省

100 rows × 6 columns

df2.sort_index()
名次总分所在省份所在城市办学方向主管部门
类型学校名称
农林中国农业大学3268.05北京北京市行业特色研究型教育部
北京林业大学8863.79北京北京市行业特色研究型教育部
华中农业大学4965.77湖北武汉市行业特色研究型教育部
华南农业大学9563.64广东广州市区域特色研究型广东省
南京农业大学4665.90江苏南京市行业特色研究型教育部
........................
财经上海财经大学6464.96上海上海市行业特色研究型教育部
中南财经政法大学7664.32湖北武汉市行业特色研究型教育部
中央财经大学8263.99北京北京市区域特色研究型教育部
对外经济贸易大学9063.77北京北京市区域特色研究型教育部
西南财经大学7764.27四川成都市区域特色研究型教育部

100 rows × 6 columns

df2.sort_index(ascending = [True, False])
名次总分所在省份所在城市办学方向主管部门
类型学校名称
农林西北农林科技大学6564.92陕西咸阳市行业特色研究型教育部
南京农业大学4665.90江苏南京市行业特色研究型教育部
华南农业大学9563.64广东广州市区域特色研究型广东省
华中农业大学4965.77湖北武汉市行业特色研究型教育部
北京林业大学8863.79北京北京市行业特色研究型教育部
........................
财经西南财经大学7764.27四川成都市区域特色研究型教育部
对外经济贸易大学9063.77北京北京市区域特色研究型教育部
中央财经大学8263.99北京北京市区域特色研究型教育部
中南财经政法大学7664.32湖北武汉市行业特色研究型教育部
上海财经大学6464.96上海上海市行业特色研究型教育部

100 rows × 6 columns

df2.sort_index(level = '学校名称')
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合上海交通大学781.76上海上海市中国研究型教育部
上海大学7564.41上海上海市区域研究型上海市
财经上海财经大学6464.96上海上海市行业特色研究型教育部
理工东北大学2669.55辽宁沈阳市中国研究型教育部
师范东北师范大学4066.50吉林长春市行业特色研究型教育部
........................
综合重庆大学2769.54重庆重庆市中国研究型教育部
理工长安大学4266.08陕西西安市行业特色研究型教育部
师范陕西师范大学8663.88陕西西安市区域特色研究型教育部
医药首都医科大学9863.32北京北京市区域特色研究型北京市
师范首都师范大学9263.73北京北京市区域特色研究型北京市

100 rows × 6 columns

df2.sort_index(level = '学校名称', ignore_index = True)
名次总分所在省份所在城市办学方向主管部门
0781.76上海上海市中国研究型教育部
17564.41上海上海市区域研究型上海市
26464.96上海上海市行业特色研究型教育部
32669.55辽宁沈阳市中国研究型教育部
44066.50吉林长春市行业特色研究型教育部
.....................
952769.54重庆重庆市中国研究型教育部
964266.08陕西西安市行业特色研究型教育部
978663.88陕西西安市区域特色研究型教育部
989863.32北京北京市区域特色研究型北京市
999263.73北京北京市区域特色研究型北京市

100 rows × 6 columns

# 只使用学校名称的前两个字排序
df2.sort_index(level = '学校名称', key = lambda x: x.str[:2])
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合上海交通大学781.76上海上海市中国研究型教育部
上海大学7564.41上海上海市区域研究型上海市
财经上海财经大学6464.96上海上海市行业特色研究型教育部
师范东北师范大学4066.50吉林长春市行业特色研究型教育部
理工东北大学2669.55辽宁沈阳市中国研究型教育部
........................
综合重庆大学2769.54重庆重庆市中国研究型教育部
理工长安大学4266.08陕西西安市行业特色研究型教育部
师范陕西师范大学8663.88陕西西安市区域特色研究型教育部
医药首都医科大学9863.32北京北京市区域特色研究型北京市
师范首都师范大学9263.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)
名次总分所在省份所在城市办学方向主管部门
类型学校名称
理工哈尔滨工业大学2172.72黑龙江哈尔滨市中国研究型工业和信息化部
哈尔滨工程大学5765.41黑龙江哈尔滨市行业特色研究型工业和信息化部
综合西安交通大学1773.56陕西西安市中国研究型教育部
理工西北工业大学3567.77陕西西安市中国研究型工业和信息化部
长安大学4266.08陕西西安市行业特色研究型教育部
.....................
华东理工大学4865.79上海上海市行业特色研究型教育部
财经上海财经大学6464.96上海上海市行业特色研究型教育部
综合上海大学7564.41上海上海市区域研究型上海市
理工东华大学7964.24上海上海市行业特色研究型教育部
医药第二军医大学7164.74上海上海行业特色研究型

100 rows × 6 columns

3.3 案例筛选

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

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

df.iloc

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

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

df.iat

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

df2.iloc[0:3] # 不包括右侧界值,切片本身代表列表,如果再加上[]会报错
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
df2.iloc[[0,3]] 
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
武汉大学482.43湖北武汉市中国研究型教育部
df2.iloc[:,0:3] # 只指定列范围,不包括右侧边界,前面的:不能省略,否则会认为这是空参
名次总分所在省份
类型学校名称
综合北京大学1100.00北京
理工清华大学298.50北京
综合复旦大学382.79上海
武汉大学482.43湖北
浙江大学582.38浙江
...............
师范浙江师范大学9663.37浙江
综合安徽大学9763.34安徽
医药首都医科大学9863.32北京
综合江南大学9963.31江苏
山西大学10063.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
名次总分类型所在省份所在城市办学方向主管部门
学校名称
北京大学1100.00综合北京北京市中国研究型教育部
清华大学298.50理工北京北京市中国研究型教育部
复旦大学382.79综合上海上海市中国研究型教育部
武汉大学482.43综合湖北武汉市中国研究型教育部
浙江大学582.38综合浙江杭州市中国研究型教育部
........................
浙江师范大学9663.37师范浙江金华市区域特色研究型浙江省
安徽大学9763.34综合安徽合肥市区域研究型安徽省
首都医科大学9863.32医药北京北京市区域特色研究型北京市
江南大学9963.31综合江苏无锡市区域特色研究型教育部
山西大学10063.29综合山西太原市区域研究型山西省

100 rows × 7 columns

df2.loc['北京大学':'复旦大学']
名次总分类型所在省份所在城市办学方向主管部门
学校名称
北京大学1100.00综合北京北京市中国研究型教育部
清华大学298.50理工北京北京市中国研究型教育部
复旦大学382.79综合上海上海市中国研究型教育部
df2.loc[['北京大学', '复旦大学']]
名次总分类型所在省份所在城市办学方向主管部门
学校名称
北京大学1100.00综合北京北京市中国研究型教育部
复旦大学382.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
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
武汉大学482.43湖北武汉市中国研究型教育部
浙江大学582.38浙江杭州市中国研究型教育部
........................
师范浙江师范大学9663.37浙江金华市区域特色研究型浙江省
综合安徽大学9763.34安徽合肥市区域研究型安徽省
医药首都医科大学9863.32北京北京市区域特色研究型北京市
综合江南大学9963.31江苏无锡市区域特色研究型教育部
山西大学10063.29山西太原市区域研究型山西省

100 rows × 6 columns

df2.loc[['财经','师范']] # 只使用最高级别的索引检索,进行筛选
名次总分所在省份所在城市办学方向主管部门
类型学校名称
师范北京师范大学1574.75北京北京市中国研究型教育部
华东师范大学2869.52上海上海市中国研究型教育部
华中师范大学3467.92湖北武汉市中国研究型教育部
东北师范大学4066.50吉林长春市行业特色研究型教育部
南京师范大学5065.71江苏南京市区域特色研究型江苏省
........................
财经中央财经大学8263.99北京北京市区域特色研究型教育部
师范陕西师范大学8663.88陕西西安市区域特色研究型教育部
财经对外经济贸易大学9063.77北京北京市区域特色研究型教育部
师范首都师范大学9263.73北京北京市区域特色研究型北京市
浙江师范大学9663.37浙江金华市区域特色研究型浙江省

16 rows × 6 columns

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

3.3直接进行条件筛选

按照数据范围进行筛选

df[筛选条件]

df2[df2.名次 > 10] 
名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合吉林大学1176.01吉林长春市中国研究型教育部
理工中国科学技术大学1275.14安徽合肥市中国研究型中国科学院
华中科技大学1375.12湖北武汉市中国研究型教育部
综合四川大学1474.99四川成都市中国研究型教育部
师范北京师范大学1574.75北京北京市中国研究型教育部
.....................
浙江师范大学9663.37浙江金华市区域特色研究型浙江省
综合安徽大学9763.34安徽合肥市区域研究型安徽省
医药首都医科大学9863.32北京北京市区域特色研究型北京市
综合江南大学9963.31江苏无锡市区域特色研究型教育部
山西大学10063.29山西太原市区域研究型山西省

90 rows × 6 columns

列表筛选

df.isin(values)

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

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

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

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

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

名次总分所在省份所在城市办学方向主管部门
类型学校名称
综合北京大学1100.00北京北京市中国研究型教育部
理工清华大学298.50北京北京市中国研究型教育部
综合复旦大学382.79上海上海市中国研究型教育部
中国人民大学681.98北京北京市中国研究型教育部
上海交通大学781.76上海上海市中国研究型教育部
........................
民族中央民族大学8963.78北京北京市行业特色研究型国家民委
财经对外经济贸易大学9063.77北京北京市区域特色研究型教育部
师范首都师范大学9263.73北京北京市区域特色研究型北京市
理工华北电力大学9363.66北京北京市区域特色研究型教育部
医药首都医科大学9863.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
YearMonthDayHourSiteParameterDate (LST)ValueUnitDurationQC Name
02012110BeijingPM2.52012-1-1 0:00303礸/mg?1 HrValid
12012111BeijingPM2.52012-1-1 1:00215礸/mg?1 HrValid
22012112BeijingPM2.52012-1-1 2:00222礸/mg?1 HrValid
32012113BeijingPM2.52012-1-1 3:0085礸/mg?1 HrValid
42012114BeijingPM2.52012-1-1 4:0038礸/mg?1 HrValid
....................................
87792012123119BeijingPM2.52012-12-31 19:00131礸/mg?1 HrValidNaN
87802012123120BeijingPM2.52012-12-31 20:00113礸/mg?1 HrValidNaN
87812012123121BeijingPM2.52012-12-31 21:0045礸/mg?1 HrValidNaN
87822012123122BeijingPM2.52012-12-31 22:0039礸/mg?1 HrValidNaN
87832012123123BeijingPM2.52012-12-31 23:0035礸/mg?1 HrValidNaN

8784 rows × 11 columns

bj2012.query("Value >100 and Month == 10 and Hour>9 and Hour <15 ")#注意是==号
YearMonthDayHourSiteParameterDate (LST)ValueUnitDurationQC Name
6610201210210BeijingPM2.52012-10-2 10:00140礸/mg?1 HrValidNaN
6611201210211BeijingPM2.52012-10-2 11:00145礸/mg?1 HrValidNaN
6612201210212BeijingPM2.52012-10-2 12:00145礸/mg?1 HrValidNaN
6613201210213BeijingPM2.52012-10-2 13:00164礸/mg?1 HrValidNaN
6614201210214BeijingPM2.52012-10-2 14:00169礸/mg?1 HrValidNaN
....................................
71902012102614BeijingPM2.52012-10-26 14:00293礸/mg?1 HrValidNaN
72102012102710BeijingPM2.52012-10-27 10:00222礸/mg?1 HrValidNaN
72112012102711BeijingPM2.52012-10-27 11:00232礸/mg?1 HrValidNaN
72122012102712BeijingPM2.52012-10-27 12:00166礸/mg?1 HrValidNaN
72132012102713BeijingPM2.52012-10-27 13:00105礸/mg?1 HrValidNaN

49 rows × 11 columns

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值