导图社区 pandas操作逻辑结构总结
pandas操作逻辑结构总结,导图介绍了Series详解、数据框、分组聚合等板块,结构型知识框架方便学习理解!
编辑于2022-04-29 22:13:38pandas功能模块操作逻辑结构
Series详解
Series 是一个带有 名称 和索引的一维数组,既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。
初始 Series
创建一个Series
列表方式创建
字典方式创建
手动指定数据类型
Series的索引
series索引有五种方式:索引、序号、逻辑值查找、切片,数组
索引
多级索引
多级索引Series对象的创建
子集的选取
内层选取
序号
user_age[0]
逻辑值查找
user_age[user_age>25]
切片
user_age[:3]
基本属性
数字类型
series.max()
series.min()
series.std()
series.median()
series.mean()
字符串类型
series.str.replace(valuel,value2)
替换
series.str.contrains()
是否含表达式
series str.cat([].sep)
拼接字符串
series.str.split( .num)
切分字符串
series.str.get[num]
获取指定位置的字符串
series.str join("")
对应每个字符串用分隔符连接起来
series.strrepeat(num)
重复
series.str.pad(nums,side='righi,fillchar=?)
对指定长度的字符串填补
默认为左填补
中间填补
右填补
series.str.wrap(pos)
指定位置加\n
series.str.slice(start.end)
指定位置切割字符串
series.str.slice,replace(start,end,")
指定位置的字符串替换指定的字符串
series.str.count(char)
计算给定字符出现的次数
series str.startswith(str)
判断是否以给定的字符串开头
series.str.endswith
同上相反
series.strfindall(pattern)
查找所有符合正则表达式的字符,以数据形式返回
series.str.match(pattern)
j检查是否全部匹配给定字符串或表达式
series.strextractll((patternl))
抽取匹配的字符串出来,注意加括号
series.str.len0
计算字符串长度
series.str.strip()
去掉前后的空白字符
series.str.rstrip()
series.str.lstrip()
series.str.partition("_")
子主题
series.str.lower()
series.str.upper()
series.str.find(str)
查找指定字符串出现的位置
画图
参数
data:series
kind
ax
其他参数参阅官方文档
数据框
创建
字典套列表方式创建
列表套字典方式创建
数组方式创建
from_dict方式
增删查补
增
增加行
增加列
删
根据行索引剔除
第二种剔除列的方法
del df['age'] df
查
按行序号访问
按行索引访问
df.loc['Tom',]
按行索引访问
df.iloc[:1,]
列名访问,多列用数组
df['age']
df.loc[:,'age']
df.iloc[:, 0:1]
按行索引访问
df.loc['Tom','age']
按行序号访问
df.iloc[:1,:1]
修改
排序
在进行数据分析时,少不了进行数据排序。Pandas 支持两种排序方式:按轴(索引或列)排序和按实际值排序。
sort_index 方法
sort_index 方法默认是按照索引进行正序排的。
user_info.sort_index()
按照列进行倒序排
user_info.sort_index(axis=1, ascending=False)
按照实际值来排序
一般在排序后,我们可能需要获取最大的n个值或最小值的n个值,我们可以使用 nlargest和 nsmallest 方法来完成,这比先进行排序,再使用 head(n) 方法快得多。
分组聚合
将对象分割成组
在进行分组统计前,首先要做的就是进行分组。既然是分组,就需要依赖于某个信息。比如,依据性别来分组。直接调用 user_info.groupby(user_info["sex"])即可完成按照性别分组。
关闭序列
默认情况下,groupby 会在操作过程中对数据进行排序。如果为了更好的性能,可以设置 sort=False。
遍历分组
在对数据进行分组后,可以进行遍历。如果是根据多个字段来分组的,每个组的名称是一个元组。
选择列
在使用 groupby 进行分组后,可以使用切片 [] 操作来完成对某一列的选择。
选择一个组
分组后,我们可以通过 get_group 方法来选择其中的某一个组。
聚合
分组的目的是为了统计,统计的时候需要聚合,所以我们需要在分完组后来看下如何进行聚合。常见的一些聚合操作有:计数、求和、最大值、最小值、平均值等。想要实现聚合操作,一种方式就是调用 agg 方法。
方法
如果是根据多个键来进行聚合,默认情况下得到的结果是一个多层索引结构。有两种方式可以避免出现多层索引
方法一
对包含多层索引的对象调用 reset_index 方法。
方法二
在分组时,设置参数 as_index=False
查看
Series 和 DataFrame 都包含了 describe 方法,我们分组后一样可以使用 describe 方法来查看数据的情况。
一次应用多个聚合操作
对DataFrame列应用不同的聚合操作
transform操作
前面进行聚合运算的时候,得到的结果是一个以分组名作为索引的结果对象。虽然可以指定 as_index=False ,但是得到的索引也并不是元数据的索引。如果我们想使用原数组的索引的话,就需要进行 merge 转换。 transform方法简化了这个过程,它会把 func 参数应用到所有分组,然后把结果放置到原数组的索引上(如果结果是一个标量,就进行广播)
通过agg得到的结果的索引是分组名
可以看到,通过 transform 操作得到的结果的长度与原来保持一致。
通过tranaform得到的结果的所以是原始索引,他将会得到的结果自动关联上原始的索引
apply操作
除了 transform 操作外,还有更神奇的 apply 操作。 apply 会将待处理的对象拆分成多个片段,然后对各片段调用传入的函数,最后尝试用 pd.concat() 把结果组合起来。func 的返回值可以是 Pandas 对象或标量,并且数组对象的大小不限。
完成聚合
grouped = user_info.groupby("sex") grouped["income"].apply(np.mean)
统计不同性别最高收入的前n个值
def f1(ser, num=2): return ser.nlargest(num).tolist() grouped["income"].apply(f1)
获取不同性别下的年龄的均值
def f2(sex): return sex.age.mean() user_info.groupby('sex').apply(f2)