Pandas常用功能

1. 数据结构

Pandas主要有三种数据结构:
一维数列:Series
二维表格:DataFrame
三维板块:Panel

对应成excel,Series就是A列,Dataframe就是sheet,Panel就是多个sheet的表格

2. 查改增删

pandas查改增删需要先索引定位,有两种方式,at为快捷形式
标签索引:loc / at 
位置索引:iloc / iat

2.1 数据查询

transcript = {'姓名': ['张三', '李四'], '成绩': [90, 60]}
df = pd.DataFrame(transcript)

running results:
姓名  成绩
0  张三  90
1  李四  60

# 数据索引
df.loc[1, '姓名']
df.iloc[1, 0]

running results:
李四
李四

2.2 数据修改

# 单值修改
df.loc[1, '姓名'] = '王五'
df.iloc[1, 0] = '王五'

running results:
姓名  成绩
0  张三  90
1  王五  60

# 整列修改
df['成绩'] = [70, 50]

running results:
姓名  成绩
0  张三  70
1  李四  50

2.3 数据增加

df['性别'] = ['男', '女']
df.loc[2] = ['王五', 50, '男']

running results:
   姓名  成绩 性别
0  张三  90  男
1  李四  60  女
2  王五  50  男

2.4 数据删除

df.drop('性别', axis=1, inplace=True)

running results:
姓名  成绩
0  张三  90
1  李四  60
2  王五  50

2.5 条件判断

df['姓名'].isin(['王五'])

running results:
0    False
1    False
2     True

2.6 条件筛选

# 范围筛选
df = df[df['成绩'] > 70]

running results:
姓名  成绩 性别
0  张三  90  男

3. 常用功能

3.1 常用函数

常用函数解释:【重要参数】
detypes返回数据类型
astype转换数据类型:int / float / bool / datetime64
shape返回数据维度
empty判断是否为空
dropna删除空值
fillna填充空值:【method】向下 ffill / 向上 bfill【limit】最大填充几行
count返回非nan单元格个数
first_valid_index返回第一个非nan的索引
last_valid_index返回最后一个非nan的索引
index / columns行 / 列
rename重命名行 / 列
unique返回唯一值
set_index将一个或多个现有列作为索引
reset_index重置索引
head / tail返回前n行 / 后n行
apply应用函数
rolling滚动计算
shift向期望方向移动n行
where根据条件筛选替换
read_excel / read_csv读取excel / csv
to_excel / to_csv存入excel / csv
统计函数解释
describe生成统计描述
max / min最大值 / 最小值
idxmax / idxmin最大值 / 最小值 位置索引
mean / median平均值 / 中位数
var / std方差 / 标准差
cumsum / cumprod累计和 / 累计积
cummax / cummin累计最大 / 累计最小
quantile样本分位数(0,1)
pct_change百分变化数
mode众数

3.2 空值处理

transcript = {'姓名': ['张三', '李四'],
              '成绩': [90, np.nan]}
df = pd.DataFrame(transcript)

# 空值补充:将没有成绩的科目分数补0
df.fillna(0, inplace=True)

running results:
姓名    成绩
0  张三  90.0
1  李四   0.0

3.3 数据替换

transcript = {'姓名': ['张三*', '李四*'],
              '性别': ['男', '女']}
df = pd.DataFrame(transcript)

running results:
   姓名 性别
0  张三*  男
1  李四*  女

# 数据替换:将名字后的*去掉,并且将"男女"改为"男生"和"女生"
df['姓名'] = df['姓名'].str.replace('*', '', regex=False)
df['性别'] = df['性别'].replace(['男', '女'], ['男生', '女生'])

running results:
姓名  性别
0  张三  男生
1  李四  女生

4. 常用操作

4.1 映射操作

主要有三个函数:map、apply、applymap

函数应用对象接受字典接受函数其它形式
mapSeries
apply通用
applymapDataFrame对整个DataFrame进行apply操作
# map映射:将"男女"用"1和0"代替
gender = {'男': 1, '女': 0}
df['性别'] = df['性别'].map(gender)

running results:
姓名  成绩  性别
0  张三  90   1
1  李四  60   0
2  王五  50   1
# apply映射:将成绩用"优"和"良"代替
df['评价'] = df['成绩'].apply(lambda x: '优' if x > 80 else '良')

running results:
   姓名  成绩 性别 评价
0  张三  90  男  优
1  李四  60  女  良
2  王五  50  男  良

4.2 排序操作

主要有三个函数:rank、sort_values、sort_index

# rank为沿轴计算数值等级
df['排名'] = df['成绩'].rank(ascending=False)

running results:
姓名  成绩 性别   排名
0  张三  90  男  1.0
1  李四  60  女  2.0
2  王五  50  男  3.0
# sort_values为按值排序,默认升序
df.sort_values('成绩', inplace=True)

# sort_index为按索引排序
df.sort_index(ascending=False, inplace=True)

running results:
姓名  成绩 性别
2  王五  50  男
1  李四  60  女
0  张三  90  男

4.3 合并操作

主要有两个函数:concat、merge

concat沿着某个方向去拼接,主要参数:
axis : axis = 0
join : "outer"
ignore_index : False
keys : None

class1 = {'姓名': ['张三', '李四'], '成绩': [90, 60], '性别': ['男', '女']}
class2 = {'姓名': ['王五', '赵六'], '成绩': [80, 70], '性别': ['男', '女']}

df1 = pd.DataFrame(class1)
df2 = pd.DataFrame(class2)

# 数据拼接
df = pd.concat([df1, df2])

running results:
   姓名  成绩 性别
0  张三  90  男
1  李四  60  女
0  王五  80  男
1  赵六  70  女

merge按照共有值去拼接,主要参数:
left : DataFrame | Series,
right : DataFrame | Series
on : IndexLabel | None = None
how : "inner"
left_on : None
right_on : None
left_index : False
right_index : False

info1 = {'姓名': ['张三', '李四'], '成绩': [90, 60]}
info2 = {'姓名': ['张三', '李四'], '性别': ['男', '女']}

df1 = pd.DataFrame(info1)
df2 = pd.DataFrame(info2)

# 数据拼接
df = pd.merge(df1, df2, on='姓名')

running results:
姓名  成绩 性别
0  张三  90  男
1  李四  60  女

4.4 透视操作

主要有两个函数:pivot(仅透视)、pivot_table(透视+计算)

transcript = {'姓名': ['张三', '李四', '张三', '李四'],
              '科目': ['语文', '语文', '数学', '数学'],
              '成绩': [90, 60, 80, 70]}

df = pd.DataFrame(transcript)

running results:
   姓名  科目  成绩
0  张三  语文  90
1  李四  语文  60
2  张三  数学  80
3  李四  数学  70

# pivot透视
df = df.pivot(index='姓名', columns='科目', values='成绩')

running results:
科目  数学  语文
姓名        
张三  80  90
李四  70  60

# pivot_table透视
df = df.pivot_table(index='姓名', values='成绩', aggfunc='sum')

running results:
     成绩
姓名     
张三  170
李四  130

4.5 分组操作

主要为函数groupby,groupby后会变成DataFrameGroupBy格式,直接打印仅显示内存地址

# 分组操作:接前文的数据定义
grouped = df.groupby(by='科目')

for course, group in grouped:
    print(course)
    print(group)

running results:
数学
   姓名  科目  成绩
2  张三  数学  80
3  李四  数学  70

语文
   姓名  科目  成绩
0  张三  语文  90
1  李四  语文  60

4.6 重塑操作

主要有两个函数:stack和unstack

# 数据定义
transcript = {'姓名': ['张三', '李四'],
              '成绩': [90, 60]}
df = pd.DataFrame(transcript)

running results:
   姓名  成绩
0  张三  90
1  李四  60
# 堆栈操作:将数据的列旋转成行,AB由列属性变成行索引
df = df.stack()

running results:
0  姓名    张三
   成绩    90
1  姓名    李四
   成绩    60

# 重置索引
df.reset_index(drop=True, inplace=True)

running results:
0    张三
1    90
2    李四
3    60
# 展开操作:将数据的行旋转成列,AB由行索引变成列属性
df = df.unstack()

running results:
姓名  0    张三
    1    李四
成绩  0    90
    1    60

# 重置索引
df.reset_index(drop=True, inplace=True)

running results:
0    张三
1    李四
2    90
3    60

5. 总结

本文主要是为了方便使用者快速定位解决简单问题,每一个函数还有很多参数可以设置,不同的函数之间还可以组合使用,以满足更复杂的需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值