1、 隐式构造
1)最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组,Series也可以创建多层索引。
s = Series(np.random.randint(0,150,size=10),index=list('qwertyuiop'))
q
131
r
144
o
102
dtype: int32
s = Series(np.random.randint(0,150,size=6),index=[['a','a','b','b','c','c'],['期中','期末','期中','期末','期中','期末']])
a 期中
59
期末
43
b 期中
28
期末
99
c 期中
92
期末
58
dtype: int32
df = DataFrame(s,columns=['python'])
2)DataFrame建丽2级列索引
df1 = DataFrame(np.random.randint(0,150,size=(4,6)),
index = list('东南西北'),
columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])
2、 显示构造pd.MultiIndex
1)使用数组构造
df2 = DataFrame(np.random.randint(0,150,size=(4,6)),
index = list('东南西北'),
columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])
2)使用tuple构造
df3 = DataFrame(np.random.randint(0,150,size=(4,6)),
index = list('东南西北'),
columns =pd.MultiIndex.from_tuples([('python','期中'),('python','期末'),
('math','期中'),('math','期末'),
('En','期中'),('En','期末')]))
3)使用product构造(推荐)
df4 = DataFrame(np.random.randint(0,150,size=(8,12)),
columns = pd.MultiIndex.from_product([['模拟考','正式考'],
['数学','语文','英语','物理','化学','生物']]),
index = pd.MultiIndex.from_product([['期中','期末'],
['雷军','李斌'],
['测试一','测试二']]))
二. 多层索引对象的索引与切片操作
1、Series的操作
注意
:对于Series来说,直接中括号[]与使用.loc()完全一样,推荐使用中括号索引和切片。
s = Series(np.random.randint(0,150,size=6),index=[['a','a','b','b','c','c'],['期中','期末','期中','期末','期中','期末']])
a 期中
59
期末
43
b 期中
28
期末
99
c 期中
92
期末
58
dtype: int32
s['a','期中']
s[['a','b']]
a 期中 59
期末 43
b 期中 28
期末 99
dtype: int32
s['a'][['期中','期末']]['期中']
s.loc['a']
期中 59
期末 43
dtype: int32
s.iloc[:5]
a 期中 59
期末 43
b 期中 28
期末 99
c 期中 92
dtype: int32
2、DataFrame操作
(1) 可以直接使用列名称来进行列索引
(2) 使用行索引需要用ix(),loc()等函数
推荐使用loc()函数
注意:在对行索引的时候,若一级行索引还有多个,对二级行索引会遇到问题!也就是说,无法直接对二级索引进行索引,必须让二级索引变成一级索引后才能对其进行索引!
df4 = DataFrame(np.random.randint(0,150,size=(8,12)),
columns = pd.MultiIndex.from_product([['模拟考','正式考'],
['数学','语文','英语','物理','化学','生物']]),
index = pd.MultiIndex.from_product([['期中','期末'],
['雷军','李斌'],
['测试一','测试二']]))
df4['模拟考'][['语文','数学']]
df4.loc['期中','雷军','测试一']['模拟考','数学']
df4.loc['期中','雷军','测试一']
模拟考 数学 61
语文 90
英语 97
化学 118
生物 127
正式考 数学 143
语文 35
英语 79
化学 90
生物 54
Name: (期中, 雷军, 测试一), dtype: int32
df4.iloc[0]
模拟考 数学 61
语文 90
英语 97
化学 118
生物 127
正式考 数学 143
语文 35
英语 79
化学 90
生物 54
Name: (期中, 雷军, 测试一), dtype: int32
df4['正式考']
注意:列索引从列开始取,必须一层层取,取完列索引,才可以取行索引,先取行索引同理。
pandas层次化索引# 导入模块,将其别名import numpy as npimport pandas as pdfrom pandas import Series,DataFrameimport matplotlib.pyplot as plt一. 创建多层行索引1、 隐式构造1)最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组,...
index = [('California', 2000), ('California', 2010), ('New York', 2000), ('New York', 2010), ('Texas', 2000), ('Texas', 2010)]
populations = [33871648, 37253956, 1897
df = pd.DataFrame({'性别' : ['男', '女', '男', '女',
'男', '女', '男', '男'],
'成绩' : ['优秀', '优秀', '及格', '差',
'及格', '及格', '优秀', '差'],
'年龄' : [15,14,15,12,13,14,15,16]})
GroupBy=df.groupby(性别)
GroupBy.iter()
GroupBy对象是一个迭代对象,每次迭代结果是一个元组,元组的第一个元素是该组的名称(就是
3.5 统计计算与描述
Pandas提供了很多跟数学和统计相关的方法,其中大部分都属于汇总统计,用来从Series中获取某个值(如max或min),或者从DataFrame的列中提取一列数据(如sum)。
3.5.1 常用的统计计算
常用描述性统计方法及说明
目录1.单级索引1. 1 loc方法、iloc方法、[ ]操作符1.1.1 loc方法(注意:所有在loc中使用的切片全部包含右端点!)1.1.2 iloc方法(注意与loc不同,切片右端点不包含)1.2 布尔索引1.2.1 布尔符号:’&’,’|’,’~’:分别代表和and,或or,取反not1.2.2 isin方法1.2.3 快速标量索引1.2.4 区间索引1.2.4.1利用interval_range方法1.2.4.2 利用cut将数值列转为区间为元素的分类变量1.2.5 区间索引的选取2 多级索引2.1 创建多级索引2.1.1 通过from_tuple或from_arrays2.1.
Pandas基础
Pandas是基于Numpy的库,但功能更加强大,Numpy专注于数值型数据的操作,而Pandas对数值型,字符串型等多种格式的表格数据都有很好的支持。
1.数据结构(Series,DataFrame,Panel)
2.索引操作
3.数据运算
4.层次化索引
5.可视化(暂时忽略)
6.示例1
7.外部数据的读取与存储(csv,txt,json,excel,数据库,web数据)
8.示例2
9.数据清洗与整理
10.示例3
11.数据分组与聚合
12.示例4
13.时间序列
# Pandas 采用了很多Numpy的代码风格,但Pandas是用来处理表
stack()
unstack()
【小技巧】:使用stack()的时候,level等于哪一个,哪一个就消失,出现在
行里;使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。
(1).
创建多层列
索引
#三层
索引
df = DataFrame(data = np.random.randint(0,150,size = (1,8)),
pandas是Python数据分析常用的库,其中多层索引在处理复杂数据时非常有用。在某些情况下,我们需要对多层索引中的行索引进行修改。此时,我们可以使用rename()方法。
rename()方法可以接受一个字典作为参数,字典中的key为原来的行索引名称,value为新的行索引名称。例如,我们有如下的数据表:
A B C
first second third
foo one A 1 2 3
B 4 5 6
two A 7 8 9
B 10 11 12
bar one A 13 14 15
B 16 17 18
two A 19 20 21
B 22 23 24
现在我们想要将第一层索引中"foo"替换为"FOO",第二层索引中"one"替换为"ONE",第三层索引中"A"替换为"a",代码如下:
df.rename(index={"foo": "FOO", "one": "ONE"}, level=[0,1], inplace=True) # 修改第一、第二层索引名称
df.rename(columns={"A": "a"}, level=2, inplace=True) # 修改第三层索引名称
修改后的数据表如下:
a B C
first second third
FOO ONE a 1 2 3
B 4 5 6
two a 7 8 9
B 10 11 12
bar ONE a 13 14 15
B 16 17 18
two a 19 20 21
B 22 23 24
可以看到,行索引名称已经被修改。当然,我们也可以只修改一层索引,在调用rename()方法时指定level参数即可。
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)
43176
报错:“AssertionError: View function mapping is overwriting an existing endpoint function”
xyy_777:
解决"python: can't open file 'manage.py': [Errno 2] No such file or directory"
xiahuyu:
python:输入两个正整数计算最大公约数和最小公倍数
小冯也是程序猿啊:
解决"python: can't open file 'manage.py': [Errno 2] No such file or directory"
tinge-L:
量化交易:创建签名、从okex平台获取ticker数据和k线数据
AI生成曾小健:
django xadmin: 'TemplateSyntaxError at /xadmin/ 'crispy_forms_tags' is not a registered tag library'
Django报错:DjangoUeditor ModuleNotFoundError: No module named 'widgets'
django xadmin: 'TemplateSyntaxError at /xadmin/ 'crispy_forms_tags' is not a registered tag library'
Django报错:DjangoUeditor ModuleNotFoundError: No module named 'widgets'