6个冷门但实用的pandas知识点

点击上方"蓝字"关注咱们web





Python大数据分析


记录   分享   成长微信


添加微信号" CNFeffery "加入技术交流群

1 简介

pandas做为开展数据分析的利器,蕴含了与数据处理相关的丰富多样的API,使得咱们能够灵活方便地对数据进行各类加工,但不少pandas中的实用方法其实大部分人都是不知道的,今天就来给你们介绍6个不太为人们所所熟知的实用pandas小技巧。app

图1

2 6个实用的pandas小知识

2.1 Series与DataFrame的互转

不少时候咱们计算过程当中产生的结果是Series格式的,而接下来的不少操做尤为是使用「链式」语法时,须要衔接着传入DataFrame格式的变量,这种时候咱们就可使用到pandasSeriesDataFrame转换的方法:less

  • 「利用to_frame()实现Series转DataFrame」
s = pd.Series([012])

# Series转为DataFrame,name参数用于指定转换后的字段名
s = s.to_frame(name='列名')
s
图2

顺便介绍一下单列数据组成的数据框转为Series的方法:dom

  • 「利用squeeze()实现单列数据DataFrame转Series」
# 只有单列数据的DataFrame转为Series
s.squeeze()
图3

2.2 随机打乱DataFrame的记录行顺序

有时候咱们须要对数据框总体的行顺序进行打乱,譬如在训练机器学习模型时,打乱原始数据顺序后取前若干行做为训练集后若干行做为测试集,这在pandas中能够利用sample()方法快捷实现。机器学习

sample()方法的本质功能是从原始数据中抽样行记录,默认为不放回抽样,其参数frac用于控制抽样比例,咱们将其设置为1则等价于打乱顺序:编辑器

df = pd.DataFrame({
    'V1': range(5),
    'V2': range(5)
})
df.sample(frac=1)
图4

2.3 利用类别型数据减小内存消耗

当咱们的数据框中某些列是由少数几种值大量重复造成时,会消耗大量的内存,就像下面的例子同样:学习

import numpy as np

pool = ['A''B''C''D']

# V1列由ABCD大量重复造成
df = pd.DataFrame({
    'V1': np.random.choice(pool, 1000000)
})

# 查看内存使用状况
df.memory_usage(deep=True)
图5
  

这种时候咱们可使用到pandas数据类型中的类别型来极大程度上减少内存消耗:测试

df['V1'] = df['V1'].astype('category')
df.memory_usage(deep=True)
图6
  

能够看到,转换类型以后内存消耗减小了将近98.3%!大数据

2.4 pandas中的object类型陷阱

在平常使用pandas处理数据的过程当中,常常会遇到object这种数据类型,不少初学者都会把它视为字符串,事实上objectpandas中能够表明不肯定的数据类型,即类型为objectSeries中能够混杂着多种数据类型:

s = pd.Series(['111100''111100'111100'111100'])
s
图7

查看类型分布:

s.apply(lambda s: type(s))
图8

这种状况下,若是贸然看成字符串列来处理,对应的没法处理的元素只会变成缺失值而不报错,给咱们的分析过程带来隐患:

s.str.replace('00''11')
图9

这种时候就必定要先转成对应的类型,再执行相应的方法:

s.astype('str').str.replace('00''11')
图10

2.5 快速判断每一列是否有缺失值

pandas中咱们能够对单个Series查看hanans属性来了解其是否包含缺失值,而结合apply(),咱们就能够快速查看整个数据框中哪些列含有缺失值:

df = pd.DataFrame({
    'V1': [12None4],
    'V2': [1234],
    'V3': [None123]
})

df.apply(lambda s: s.hasnans)
图11

2.6 使用rank()计算排名时的五种策略

pandas中咱们能够利用rank()方法计算某一列数据对应的排名信息,但在rank()中有参数method来控制具体的结果计算策略,有如下5种策略,在具体使用的时候要根据须要灵活选择:

  • 「average」

average策略下,相同数值的元素的排名是其内部排名的均值:

s = pd.Series([122234456])
s.rank(method='average')
图12
  • 「min」

min策略下,相同元素的排名为其内部排名的最小值:

s.rank(method='min')
图13
  • 「max」

max策略与min正好相反,取的是相同元素内部排名的最大值:

s.rank(method='max')
图14
  • 「dense」

dense策略下,至关于对序列去重后进行排名,再将每一个元素的排名赋给相同的每一个元素,这种方式也是比较贴合实际需求的:

s.rank(method='dense')
图15
  • 「first」

first策略下,当多个元素相同时,会根据这些相同元素在实际Series中的顺序分配排名:

s = pd.Series([22213])
s.rank(method='first')
图16

关于pandas还有不少实用的小知识,之后会慢慢给你们不按期分享~欢迎在评论区与我进行讨论

咱们的知识星球【Python大数据分析】

限时优惠中(还有4天)!扫码领券

年费立减20仅需59元~

快来一块儿玩转数据分析吧🚀🚀🚀


· 往期精选 ·
1

Python中的yield究竟是个什么鬼?

2

在pandas中使用数据透视表

3

在模仿中精进数据可视化03:OD数据的特殊可视化方式




Python大数据分析

data creates value

扫码关注咱们


本文分享自微信公众号 - Python大数据分析(pydatas)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索