文章来源:towardsdatascience

作者:B.Chen 翻译\编辑:Python大数据分析

pandas是python中常用的数据分析库,出现频率非常高,而且pandas功能之多让人咋舌,即使pandas老手也没法保证能高效使用pandas做数据分析。

这篇文章目的梳理几个高效实用的pandas小技巧,供大家参考。

1. 从剪切板中创建DataFrame

pandas中的read_clipboard()方法非常神奇,可以把剪切板中的数据变成dataframe格式,也就是说直接在excel中复制表格,可以快速转化为dataframe。

以下面这个excel数据表为例,全部选中,按ctrl+c复制:

然后在python中执行pd.read_clipboard(),就能得到一模一样的dataframe数据表:

pd.read_clipboard()

这功能对经常在excel和python中切换的分析师来说简直是福音,excel中的数据能一键转化为pandas可读格式。

2.  通过数据类型选择columns

数据分析过程可能会需要筛选数据列,比如只需要数值列,以经典的泰坦尼克数据集为例:

import seaborn as sns# 导出泰坦尼克数据集df = sns.load_dataset('titanic')df.head()

查看该数据集各列的数据类型:

df.dtypes

可以看到各列的数据类型不太一样,有int、object、float、bool等。

如果说我只要需要数值列,也就是数据类型为int、float的列,可以通过select_dtypes方法实现:

df.select_dtypes(include='number').head()

选择除数据类型为int外其他的列,注意这里的参数是exclude

df.select_dtypes(exclude='int').head()

也可以选择多种数据类型:

df.select_dtypes(include=['int', 'datetime', 'object']).head()

3. 将strings改为numbers

在pandas中,有两种方法可以将字符串改为数值:

  • astype()方法
  • to_numeric()方法

先创建一个样本dataframe,看看这两种方法有什么不同。

import pandas as pddf = pd.DataFrame({ 'product': ['A','B','C','D'],                    'price': ['10','20','30','40'],                   'sales': ['20','-','60','-']                  })df

product列是字符串类型,price、sales列虽然内容有数字,但它们的数据类型也是字符串。

值得注意的是,price列都是数字,sales列有数字,但空值用-代替了。

df.dtypes

下面我们用astype()方法将price列的数据类型改为int:

df['price'] = df['price'].astype(int)# 或者用另一种方式df = df.astype({'price': 'int'})

但如果你同样用astype()方法更改sales列的话就会出现报错:

df['sales'] = df['sales'].astype(int)

原因是sales列里面的内容除了数字外还有-,它是字符串,没办法转化为int

to_numeric()方法却可以解决这一问题,只需要设置参数errors='coerce'

df['sales'] = pd.to_numeric(df['sales'], errors='coerce')

df

现在sale列中的-已经被替换成了NaN,它的数据类型也变成了float

df.dtypes

4. 检测并处理缺失值

有一种比较通用的检测缺失值的方法是info(),它可以统计每列非缺失值的数量。

还是用泰坦尼克数据集:

import seaborn as sns# 导出泰坦尼克数据集df = sns.load_dataset('titanic')df.info()

标红色地方是有缺失值的列,并且给出了非缺失值的数量,你可以计算出该列有多少缺失值。

这样看可能不够直观,那可以用df.isnull().sum()方法很清楚地得到每列有多少缺失值:

df.isnull().sum()

df.isnull().sum().sum()则能够返回该数据集总共有多少缺失值:

df.isnull().sum().sum()

还可以看缺失值在该列的占比是多少,用df.isna().mean()方法:

df.isna().mean()

注意:这里isnull()isna()使用效果一样。

那如何处理缺失值呢?

两种方式:删除和替换。

  • 删除包含缺失值的行:
df.dropna(axis = 0)
  • 删除包含缺失值的列:
df.dropna(axis = 1)
  • 如果一列里缺失值超过10%,则删除该列:
df.dropna(thresh=len(df)*0.9, axis=1)
  • 用一个标量替换缺失值:
df.fillna(value=10)
  • 用上一行对应位置的值替换缺失值:
df.fillna(axis=0, method='ffill')
  • 用前一列对应位置的值替换缺失值:
df.fillna(axis=1, method='ffill')
  • 用下一行对应位置的值替换缺失值:
df.fillna(axis=0, method='bfill')
  • 用后一列对应位置的值替换缺失值:
df.fillna(axis=1, method='bfill')
  • 使用某一列的平均值替换缺失值:
df['Age'].fillna(value=df['Age'].mean(), inplace=True)

当然你还可以用最大最小值、分位数值等来替换缺失值。

5. 对连续数据进行离散化处理

在数据准备过程中,常常会组合或者转换现有特征以创建一个新的特征,其中将连续数据离散化是非常重要的特征转化方式,也就是将数值变成类别特征。

同样以泰坦尼克数据集为例,里面有一列是年龄特征age:

import seaborn as sns# 导出泰坦尼克数据集df = sns.load_dataset('titanic')df['age'].head()

年龄是一段连续值,如果我们想对它进行分组变成分类特征,比如(<=12,儿童)、(<=18,青少年)、(<=60,成人)、(>60,老人),可以用cut方法实现:

import sysdf['ageGroup']=pd.cut(                    df['age'],                     bins=[0, 13, 19, 61, sys.maxsize],                     labels=['儿童', '青少年', '成人', '老人']                      )

df.head()

注意:这里的sys.maxsize是指可以存储的最大值。

可以看到新增了一列ageGroup,用以展示年龄分组:

df['ageGroup'].head()

6. 从多个文件中构建一个DataFrame

有时候数据集可能分布在多个excel或者csv文件中,但需要把它读取到一个DataFrame中,这样的需求该如何实现?

做法是分别读取这些文件,然后将多个dataframe组合到一起,变成一个dataframe。

这里使用内置的glob模块,来获取文件路径,简洁且更有效率。


在上图中,glob()在指定目录中查找所有以“ data_row_”开头的CSV文件。

glob()以任意顺序返回文件名,这就是为什么使用sort()函数对列表进行排序的原因。

「行合并」

假设数据集按行分布在2个文件中,分别是data_row_1.csv和data_row_2.csv


用以下方法可以逐行合并:

files = sorted(glob('data/data_row_*.csv'))pd.concat((pd.read_csv(file) for file in files), ignore_index=True)

sorted(glob('data/data_row_*.csv'))返回文件名,然后逐个读取,并且使用concat()方法进行合并,得到结果:


「列合并」

假设数据集按列分布在2个文件中,分别是data_row_1.csv和data_row_2.csv


用以下方法可以逐列合并:

files = sorted(glob('data/data_col_*.csv'))pd.concat((pd.read_csv(file) for file in files), axis=1)

sorted(glob('data/data_row_*.csv'))返回文件名,然后逐个读取,并且使用concat()方法进行列合并(注意这里axis=1),得到结果:


本文就到这里,pandas还有很多让人惊喜的小技巧,大家有兴趣也可以在评论区说说你的使用心得。

往期精彩回顾

适合初学者入门人工智能的路线及资料下载

机器学习及深度学习笔记等资料打印

机器学习在线手册

深度学习笔记专辑

《统计学习方法》的代码复现专辑

AI基础下载

机器学习的数学基础专辑

获取一折本站知识星球优惠券,复制链接直接打开:

https://t.zsxq.com/662nyZF

本站qq群1003271085。

加入微信群请扫码进群(如果是博士或者准备读博士请说明):

pandas fillna_【Python基础】快速提升效率的6个pandas使用小技巧相关推荐

  1. 【Python基础】快速提升效率的6个pandas使用小技巧

    文章来源:towardsdatascience 作者:B.Chen  翻译\编辑:Python大数据分析 pandas是python中常用的数据分析库,出现频率非常高,而且pandas功能之多让人咋舌 ...

  2. 操作系统:提升电脑开机速度的15个小技巧

    今天小编给大家分享提升电脑开机速度的15个小技巧,希望对大家能有所帮助! 1.禁用闲置的IDE通道 右键点击"我的电脑-属性",然后点击"硬件"接着点击&quo ...

  3. python类型转换astype时间_Pandas数据类型转换的几个小技巧

    利用Pandas进行数据分析时,确保使用正确的数据类型是非常重要的,否则可能会导致一些不可预知的错误发生.笔者使用Pandas已经有一段时间了,但是还是会在一些小问题上犯错误,追根溯源发现在对数据进行 ...

  4. 提升UI设计界面高级感的小技巧

    在UI设计中,界面排版同样很重要,将有效的信息传递给用户这才是用户界面的功能,下面小千就给大家介绍五个能够提升你的设计高级感的小技巧,学到就是赚到! 1.强化层次结构来提升UI的清晰度 将必要的文本内 ...

  5. win7计算机ftp清理记录,快速清除Win7使用记录的4则小技巧

    快速清除Win7使用记录的4则小技巧分享给大家,相信大家对于电脑系统中的使用记录都有一定的芥蒂,特别是在使用别人的电脑时,离开的时候总是想要把自己的浏览痕迹清除干净,以免泄露隐私,网上关于清除痕迹的方 ...

  6. 分享Figma一些非常快速、省时、省力的功能和小技巧

    众所周知,越来越多的大工厂正在使用它figma了,那你的figma它是如何使用的?您是否遇到过一些问题或操作不方便的事情?今天,我想和大家分享Figma一些非常快速.省时.省力的功能和小技巧,因为文章 ...

  7. Axure RP使用技巧分享 快速提升效率

    Axure专为快速原型设计而生的应用,Axure破解版可以辅助产品经理快速设计完整的产品原型,并结合批注,说明以及流程图,框架图等元素.如何使用Axure设计工具提升效率,包括以下几方面 1.通用元件 ...

  8. 淘宝新品怎么做权重 快速提升淘宝新店单品权重方法技巧

    淘宝对新店.新品是有流量扶持,但是权重并不会有优势,需要自己去提升!下面分享一些技巧! 淘宝下架时间权重已经重新成为"全部宝贝"动态排名的权重之王.接近下架的品种得到临时加权,越接 ...

  9. 快速提升UI设计感的7个版式小妙招

    看了很多关于UI设计版式技巧仍排不好版?懂得很多套路仍做不好UI设计?其实也正常,因为大部分技巧都比较笼统,每个人用起来也会有不同的效果,所以合肥学码思小编特地总结了7个比较具体的小技巧,算是属于一学 ...

最新文章

  1. Centos7上安装最新的nodejs
  2. java中flush 函数,Java DataOutputStream.flush()类型
  3. python--学习笔记6 pandas
  4. php导出csv文件乱码问题解决方法
  5. LUNA16_Challange数据预处理4
  6. 【06年博文搬家】一个修改时间的批处理程序
  7. python 实现注册、登录功能
  8. Helm 3 完整教程(八):Helm 函数讲解(2)字符串函数
  9. Latex初学者指南
  10. 即时语音提示软件php,InsTalk即时语音提示校对软件(语音识别和语音合成软件)
  11. KiB、MiB与KB、MB的区别
  12. vivos7和vivo6有什么区别(主要看配置参数对比)
  13. python画圣诞帽_用Python就可以给你的头像戴上圣诞帽,别@微信团队了!
  14. 使用DFA算法对敏感词进行过滤
  15. 浪潮存储加速国产替代
  16. M八七电影《新·奥特曼》主题曲歌手:米津玄師罗马音注释
  17. 【深度学习】120G+训练好的word2vec模型(中文词向量)
  18. 1、零基础学工控——初识plc
  19. EXCEL学生成绩里计算年级名次、班级名次
  20. 微博尾巴不加android,! android应用——装逼神器《微博尾》

热门文章

  1. python练习题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
  2. python自带的Mock模块使用
  3. 高一数学集合知识点整理_高一数学 | 高一数学函数图像知识点总结,实用!
  4. 用于WWW传输控制的是HTML,控制传输
  5. html隐藏元素的方式,Web前端:CSS3——3种隐藏元素方法的区别
  6. source环境变量命令千万不能乱用
  7. Linux ubuntu 修改终端【普通用户、root用户】命令(命令行)配色(颜色)(命令行自动计数)(/etc/profile)(~/bashrc)(source命令)
  8. 网络编程 数据的封装与解封装过程
  9. pytorch的梯度计算以及backward方法
  10. Easy Summation 预处理 快速幂