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使用实用技巧的更多相关文章

  1. Notepad++ 实用技巧

    Notepad++是一款开源的文本编辑器,功能强大.很适合用于编辑.注释代码.它支持绝大部分主流的编程语言. 本文主要列举了本人在实际使用中遇到的一些技巧. 快捷键 自定义快捷键 首先,需要知道的是: ...

  2. javascript实用技巧、javascript高级技巧

    字号+作者:H5之家 来源:H5之家 2016-10-31 11:00 我要评论( ) 三零网提供网络编程. JavaScript 的技术文章javascript实用技巧.javascript高级技巧 ...

  3. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...

  4. iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示

    iOS开发实用技巧—在手机浏览器头部弹出app应用下载提示 本文介绍其简单使用: 第一步:在本地建立一个访问的服务端.  打开本地终端,在本地新建一个文件夹,在该文件夹中存放测试的html页面.   ...

  5. iOS开发实用技巧—项目新特性页面的处理

    iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...

  6. IOS 网络浅析-(十三 SDWebImage 实用技巧)

    IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...

  7. NSString的八条实用技巧

    NSString的八条实用技巧 有一篇文章写了:iOS开发之NSString的几条实用技巧 , 今天这篇,我们讲讲NSString的八条实用技巧.大家可以收藏起来,方便开发随时可以复制粘贴. 0.首字 ...

  8. ###《VIM实用技巧》

    ###<VIM实用技巧> #@author: gr #@date: 2015-11-20 #@email: forgerui@gmail.com <VIM实用技巧>阅读笔记. ...

  9. PowerDesigner实用技巧小结(3)

    PowerDesigner实用技巧小结(3) PowerDesigner 技巧小结 sqlserver数据库databasevbscriptsqldomain 1.PowerDesigner 使用 M ...

随机推荐

  1. Python中的 x+=x 与 x = x + x的区别

    对于Python中的可变数据类型(列表,字典)来说,+= 和 ..=..+..是不同的 加等是直接在变量的值上面进行操作,会修改了原来变量的值 先等后加会重新分配一个内存空间,不会再原有的变量值上面进 ...

  2. Python DBUtils 连接池对象 (PooledDB)

    数据处理框架用到 mysql, 需要在多进程中的多线程中使用 mysql 的连接 使用到的模块: DBUtils 实现: 使用 DBUtils 中的 PooledDB 类来实现. 自己写一个类, 继承 ...

  3. InheritedWidget and screen

    self: import 'package:flutter/material.dart'; class GrantScreen { static double _width, _height; sta ...

  4. pandas-05 map和replace操作

    # pandas-05 map和replace操作 map可以做一个映射,对于操作大型的dataframe来说就非常方便了,而且也不容易出错.replace的作用是替换,这个很好理解. import ...

  5. 报错The "chunk" argument must be one of type string or Buffer. Received type object

    报错内容: TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or ...

  6. insmod/rmmod

    insmod -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入 -k 将模块设置为自动卸除 -m 输出模块的载入信息 -o <模块名称> 指定模块的名 ...

  7. 《Spring in Action 4》阅读札记

    重要思路 Spring通过面向POJO编程.依赖注入.AOP和模板技术来降低Java开发的复杂性. 依赖注入能够让互相协作的软件组件保持松耦合,模块直接的耦合性是必要的,否则没法完成工作,但是耦合性需 ...

  8. 基于 K8S 集群安装部署 istio-1.2.4

    使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...

  9. django数据表生成

    在创建的app中models.py生成表结构 class 表名(models.Model): #表名一般首字母大写 中突出信息的大写 列名=models.Charfield(max_lenth=) # ...

  10. Shell 行遍历命令行的输出结果

      对于命令行输出的结果,如果要遍历,一般都是用for循环遍历,具体语法为: for line in `ls` do dosomethingdone   此时对于ls这类语句的输出结果,在遍历的时候会 ...