Pandas使用实用技巧
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
Pandas使用实用技巧的更多相关文章
- Notepad++ 实用技巧
Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...
- javascript实用技巧、javascript高级技巧
字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示
iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端. 打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面. ...
- iOS开发实用技巧—项目新特性页面的处理
iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- NSString的八条实用技巧
NSString的八条实用技巧 有一篇文章写了:iOS开发之NSString的几条实用技巧 , 今天这篇,我们讲讲NSString的八条实用技巧.大家可以收藏起来,方便开发随时可以复制粘贴. 0.首字 ...
- ###《VIM实用技巧》
###<VIM实用技巧> #@author: gr #@date: 2015-11-20 #@email: forgerui@gmail.com <VIM实用技巧>阅读笔记. ...
- PowerDesigner实用技巧小结(3)
PowerDesigner实用技巧小结(3) PowerDesigner 技巧小结 sqlserver数据库databasevbscriptsqldomain 1.PowerDesigner 使用 M ...
随机推荐
- swagger2 404
swagger2 404 正确配置swagger后(配置),出现404问题. 如图: 分析原因 我是在配置完成swagger后正常使用过一段时间的,然后检查了相关配置项的代码,没有被改动过.可以确定s ...
- GridPanel列头带有复选框的列
由于工作需要,封装了ExtJS4,GridPanel列头带有复选框的列, 代码如下: /** * 列头带有复选框的列 * */ Ext.define("org.pine.widget.Che ...
- 正则表达式修饰符 i、g、m、s、U、x、a、D、e 等。
正则表达式中常用的模式修正符有i.g.m.s.U.x.a.D.e 等. 它们之间可以组合搭配使用. i 不区分(ignore)大小写: 例如: /abc/i 可以匹配 abc.aBC.Abc g 全局 ...
- ABAP开发环境语法高亮的那些事儿
关于SAP ABAP开发环境,Jerry之前写过几篇公众号文章: 那些年我用过的SAP IDE 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧 使用Visual Studio Code ...
- session有效期设置的两种方式
/**session有效期设置的两种方式: * 1.代码设置:session.setMaxInactiveInterval(30);//单位:秒.30秒有效期,默认30分钟. * 2.web.xml中 ...
- Linux加密和数据安全性
加密和安全 墨菲定律 墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的, 原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导 致灾难,则必定有人会 ...
- Linux命令——groups
groups用于查询当前用户的属组,没有参数.
- 使用opencv去操作树莓派摄像头保存图片和视频
利用树莓派的摄像头去学习opencv的基本操作 —— 保存图片和视频 1.使用Opencv去控制树莓派的摄像头拍照并保存到本地,主要使用cv2和numpy库 #!/usr/bin/python3 # ...
- VLAN实验4:利用单臂路由实现VLAN间路由
单臂路由: 实验环境: 实验拓扑图: 实验编址: 实验步骤:1.创建VLAN并配置Access.Trunk接口. 我们在S2上创建VLAN10和VLAN20,并且吧链接PC1的E0/0/1和链接PC2 ...
- poj3522Slim Span(暴力+Kruskal)
思路: 最小生成树是瓶颈生成树,瓶颈生成树满足最大边最小. 数据量较小,所以只需要通过Kruskal,将边按权值从小到大排序,枚举最小边求最小生成树,时间复杂度为O( nm(logm) ) #incl ...