我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

pandas是跨语言的科学计算类的库,在pythonR中都存在。那么,在苏南大叔的后续文章中,对于介绍pandas的函数的文章,都不会特别强调python,但是很有可能会使用python做范例语言。本文,讲述的是seriesmap函数,这个函数究竟是如何使用的呢?

苏南大叔:pandas的series的map函数,series数据如何按图索骥? - pandas-series-map
pandas的series的map函数,series数据如何按图索骥?(图2-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事,欢迎关注。本文将要描述pandas里面的特殊数据结构seriesmap()功能。这是个非常特殊的函数,功能居然很分裂。(苏南大叔表示挺意外的)。测试环境:win10python@3.6.8pandas@1.1.5

官方说明

这里是pandas的官方说明链接,大家以这个为准。

苏南大叔:pandas的series的map函数,series数据如何按图索骥? - 官方说明文件
pandas的series的map函数,series数据如何按图索骥?(图2-2)

下面就结合官方的例子,说说苏南大叔的理解。

姿势一:按图索骥

苏南大叔的理解下,正常情况下,A.map(B)就是一个按图索骥功能。
传入一个dict字典对象B,里面定义了A中的成员对应于谁,如果A的成员在B中没有定义,就返回NaN。返回新的Series就是NaN和对应后的成员组合。范例代码如下:

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
b = a.map({'Java': 'Core'})
print(b)

输出:

0    Core
1     NaN
2     NaN
3     NaN
dtype: object

特殊情况就是:字典B也可以定义A中的NaN对应于谁。代码如下:

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
b = a.map({'Java': 'Core', np.nan : "super"})
print(b)

输出:

0    Core
1     NaN
2     NaN
3    super
dtype: object

这个例子中,na_action='ignore'没有啥用,加上也没有啥反应。

姿势二:简单应用函数

下面的例子中,就是对series简单应用个转小写字母的功能。

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
b = a.map(str.lower, na_action='ignore')
print(b)

输出:

0    java
1       c
2     c++
3     NaN
dtype: object

这个例子中,na_action='ignore'有重要作用,不加的话就会因为NaN而报错。

TypeError: descriptor 'lower' requires a 'str' object but received a 'float'

姿势三:简单应用自定义函数

下面的例子中,就是对series简单应用的是个自定义功能。

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
c=a.map('I like {}'.format)
print(c)

输出:

0    I like Java
1       I like C
2     I like C++
3     I like nan
dtype: object

这里的输出值中的I like nan显然有问题,需要增加na_action='ignore'控制输出。

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
d=a.map('I dont like {}'.format, na_action='ignore')
print(d)

输出值是:

0    I dont like Java
1       I dont like C
2     I dont like C++
3                 NaN
dtype: object

姿势四:lamada表达式传参应用

下面的例子中,使用了拉姆达表达式:

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
d = a.map(lambda x: x.lower())
print(d)

报错:

AttributeError: 'float' object has no attribute 'lower'

需要增加参数na_action='ignore'控制输出。

import pandas as pd
import numpy as np
a = pd.Series(['Java', 'C', 'C++', np.nan])
d = a.map(lambda x: x.lower(),na_action='ignore')
print(d)

输出:

0    java
1       c
2     c++
3     NaN
dtype: object

课后题

看看下面的这段菜谱配料表的代码输出是啥?

import pandas as pd
from pandas import Series, DataFrame
data = DataFrame({
    'food':[
        'bacon',
        'pulled pork',
        'bacon',
        'Pastrami',
        'corned beef',
        'Bacon',
        'pastrami',
        'honey ham',
        'nova lox'
    ],
    'ounces':[4,3,12,6,7.5,8,3,5,6]
})
meat_to_animal = {
    'bacon':'pig',
    'pulled pork':'pig',
    'pastrami':'cow',
    'corned beef':'cow',
    'honey ham':'pig',
    'nova lox':'salmon'
}
data['food2'] = data['food'].map(str.lower)
data['animal2'] = data['food'].map(str.lower).map(meat_to_animal)
data['animal3'] = data['food'].map(lambda x: meat_to_animal[x.lower()],na_action='ignore')
print(data)

结果评论可见,如下所示:

newsn.net:这里是【评论】可见内容

参考文献

总结

在苏南大叔看来,这个pandas里面一切函数及概念,都是很奇怪的。然而,这个pandas确是在科学计算(机器学习)领域,非常频繁使用的类库。如果您也对这个pandas也很迷惑的话,这里是苏南大叔的理解:dataframe就类似excel里面的一张表,series就是一张表中的一列。也许会帮助你对pandas的系列操作进行理解。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    pandas