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

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

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

图1 2 6个实用的pandas小知识 2.1 Series与DataFrame的互转

  很多时候我们计算过程中产生的结果是Series格式的,而接下来的很多操作尤其是使用链式语法时,需要衔接着传入DataFrame格式的变量,这种时候我们就可以使用到pandas中Series向DataFrame转换的方法:

利用to_frame()实现Series转DataFrame

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

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

图2

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

利用squeeze()实现单列数据DataFrame转Series

# 只有单列数据的DataFrame转为Series s.squeeze()

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

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

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

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

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

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

图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)

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

图5  

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

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

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

图6  

  可以看到,转换类型之后内存消耗减少了将近98.3%!

2.4 pandas中的object类型陷阱

  在日常使用pandas处理数据的过程中,经常会遇到object这种数据类型,很多初学者都会把它视为字符串,事实上object在pandas中可以代表不确定的数据类型,即类型为object的Series中可以混杂着多种数据类型:

s = pd.Series(['111100', '111100', 111100, '111100']) s

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

图7

  查看类型分布:

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

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

图8

  这种情况下,如果贸然当作字符串列来处理,对应的无法处理的元素只会变成缺失值而不报错,给我们的分析过程带来隐患:

s.str.replace('00', '11')

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

图9

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

s.astype('str').str.replace('00', '11')

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysyds.html