Pandas使用实用技巧
2024-09-08 14:22:05
Pandas实用使用技巧
1 列拆分成行
常见的需求是将某一列根据指定的分隔符拆分成多列。现有需求,根据指定的分隔符将其拆分为多行。
例:
df = A B
0 a f
1 b;c h;g
2 d k
3 e l
现需要将其拆分为:
df = A B
0 a f
1 b h
1 c g
2 d k
3 e l
1.1 处理A列
实现过程如下:
df = pd.DataFrame({'A': ['a', 'b;c', 'd', 'e'], 'B': ['f', 'h;j', 'k', 'l']})
df
A B
0 a f
1 b;c h;j
2 d k
3 e l
将A列按照“;”分割,并展开为DataFrame,该效果由expand参数空值:
df_a = df['A'].str.split(';', expand=True)
df_a 0 1
0 a None
1 b c
2 d None
3 e None
将df_a进行堆积:
df_a = df_a.stack()
df_a 0 0 a
1 0 b
1 c
2 0 d
3 0 e
dtype: object
将内层索引重置为列并删除掉:
df_a = df_a.reset_index(level=1, drop=True)
df_a 0 a
1 b
1 c
2 d
3 e
dtype: object
重命名该Series,否则接下来合并会失败:
df_a.rename('A_split', inplace=True)
df_a 0 a
1 b
1 c
2 d
3 e
Name: A_split, dtype: object
1.2 处理列B
处理过程同列A,最后重命名后为:
df_b.rename('B_split', inplace=True)
df_b 0 f
1 h
1 j
2 k
3 l
Name: B_split, dtype: object
1.3 合并A_split和B_split
水平合并处理完成后的两列:
concat_a_b = pd.concat([df_a, df_b], axis=1)
concat_a_b
A_split B_split
0 a f
1 b h
1 c j
2 d k
3 e l
1.4 最后和原数据合并
将最终处理的数据和原数据根据索引进行合并:
df = df.join(concat_a_b, how='inner')
df A B A_split B_split
0 a f a f
1 b;c h;j b h
1 b;c h;j c j
2 d k d k
3 e l e l
最后达到了想要的效果。
2 切片插入多行
常见的需求是在指定的位置插入一行或者一列。现有需求,在指定的位置插入多行或者多列:
df = pd.DataFrame({'Name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'Age': [28,34,29,42]}) df
Out[4]:
Name Age
0 Tom 28
1 Jack 34
2 Steve 29
3 Ricky 42 df1 = pd.DataFrame({'Name':['Anna', 'Susie'],'Age':[20,50]}) df1
Out[6]:
Name Age
0 Anna 20
1 Susie 50
df2 = pd.DataFrame({'Name':['Anna', 'Susie', 'Jhone'],'Age':[20, 50, 35]})
df2
Out[10]:
Name Age
0 Anna 20
1 Susie 50
2 Jhone 35
2.1 将df1作为整体插入索引2的位置
通过numpy的insert方法实现数组重构,然后再将数组构造成需要的表格:
np.insert(df.values, 2, df1.values, axis=0)
Out[7]:
array([['Tom', 28],
['Jack', 34],
['Anna', 20],
['Susie', 50],
['Steve', 29],
['Ricky', 42]], dtype=object)
可以观察到数据被插入到df索引2的位置。可以根据原来的列名直接构造DataFrame来实现需求:
pd.DataFrame(np.insert(df.values, 2, df1.values, axis=0), columns=df.columns)
Out[8]:
Name Age
0 Tom 28
1 Jack 34
2 Anna 20
3 Susie 50
4 Steve 29
5 Ricky 42
2.2 将df2每一行分开插入到指定位置
通过numpy的insert方法实现数组重构,然后再将数组构造成需要的表格:
np.insert(df.values, (0, 1, 2), df2.values, axis=0)
Out[12]:
array([['Anna', 20],
['Tom', 28],
['Susie', 50],
['Jack', 34],
['Jhone', 35],
['Steve', 29],
['Ricky', 42]], dtype=object)
可以观察到数据被插入到df索引0、1、2的位置。可以根据原来的列名直接构造DataFrame来实现需求:
pd.DataFrame(np.insert(df.values, (0, 1, 2), df2.values, axis=0), columns=df.columns)
Out[13]:
Name Age
0 Anna 20
1 Tom 28
2 Susie 50
3 Jack 34
4 Jhone 35
5 Steve 29
6 Ricky 42
最新文章
- iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)
- 清北学堂模拟赛day7 错排问题
- javascript 键盘输入过滤,只能输入数字,小数一位且只能输入5
- Wijmo 2016年蓝图
- mysql,命令导入\导出表结构或数据
- MyEclipse------黑科技
- BZOJ3488 : [ONTAK2010]Highways
- Mac 下 Nginx、MySQL、PHP-FPM 的安装配置
- MySQL增删改查的常用操作指令总结
- HDU 5501 背包问题
- vbox安装mac os x
- Dubbo源码学习--环境搭建及基础准备(ServiceLoader、ExtensionLoader)
- PHP数组实际占用内存大小的分析
- (七)SpringBoot2.0基础篇- application.properties属性文件的解析及获取
- linux添加crontab定时任务
- Floyd算法解决多源最短路问题
- Stars HDU - 1541
- javaScript:压缩图片并上传
- VC++界面编程之--仿Facebook透明登录窗体
- epoll讲解--转自知乎
热门文章
- C#设计模式之12:中介者模式
- Golang/Go goroutine调度器原理/实现【原】
- NEST refresh flush forcemerge
- (转) Python3—UnicodeEncodeError 'ascii' codec can't encode characters in position 0-1
- ajax的五大步骤
- react native 集成react navigation报错
- http请求的几种content-type
- java程序员常用的cmd命令
- 【Python】eval 函数
- Python学习日记(二十八) hashlib模块、configparse模块、logging模块