Pandas中文官檔~基礎(chǔ)用法3

呆鳥(niǎo)云:“覺(jué)得有用,就請(qǐng)點(diǎn)個(gè)贊纯衍,哈哈”

函數(shù)應(yīng)用

不管是為 pandas 對(duì)象應(yīng)用自定義函數(shù)栋齿,還是應(yīng)用其它第三方函數(shù),都離不開(kāi)以下三種方法襟诸。用哪種方法取決于操作的對(duì)象是 DataFrameSeries 瓦堵,是行或列,還是元素歌亲。

  1. 表級(jí)函數(shù)應(yīng)用:pipe()

  2. 行列級(jí)函數(shù)應(yīng)用: apply()

  3. 聚合 API: agg()transform()

  4. 元素級(jí)函數(shù)應(yīng)用:applymap()

表級(jí)函數(shù)應(yīng)用

雖然可以把 DataFrameSeries 傳遞給函數(shù)谷丸。不過(guò),通過(guò)鏈?zhǔn)秸{(diào)用函數(shù)時(shí)应结,最好使用 pipe() 方法刨疼。對(duì)比以下兩種方式:

# f, g, and h are functions taking and returning ``DataFrames``
>>> f(g(h(df), arg1=1), arg2=2, arg3=3)

下列代碼與上述代碼等效

>>> (df.pipe(h)
...    .pipe(g, arg1=1)
...    .pipe(f, arg2=2, arg3=3))

pandas 鼓勵(lì)使用第二種方式,即鏈?zhǔn)椒椒ǘ炝洹T阪準(zhǔn)椒椒ㄖ姓{(diào)用自定義函數(shù)或第三方支持庫(kù)函數(shù)時(shí)揩慕,用 pipe 更容易,與用 pandas 自身方法一樣扮休。

上例中迎卤,fgh 這幾個(gè)函數(shù)都把 DataFrame 當(dāng)作首位參數(shù)玷坠。要是想把數(shù)據(jù)作為第二個(gè)參數(shù)蜗搔,該怎么辦?本例中八堡,pipe 為元組 (callable,data_keyword)形式樟凄。.pipeDataFrame 作為元組里指定的參數(shù)。

下例用 statsmodels 擬合回歸兄渺。該 API 先接收一個(gè)公式缝龄,DataFrame 是第二個(gè)參數(shù),data。要傳遞函數(shù)叔壤,則要用pipe 接收關(guān)鍵詞對(duì) (sm.ols,'data')瞎饲。

In [138]: import statsmodels.formula.api as sm

In [139]: bb = pd.read_csv('data/baseball.csv', index_col='id')

In [140]: (bb.query('h > 0')
   .....:    .assign(ln_h=lambda df: np.log(df.h))
   .....:    .pipe((sm.ols, 'data'), 'hr ~ ln_h + year + g + C(lg)')
   .....:    .fit()
   .....:    .summary()
   .....:  )
   .....: 
Out[140]: 
<class 'statsmodels.iolib.summary.Summary'>
"""
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                     hr   R-squared:                       0.685
Model:                            OLS   Adj. R-squared:                  0.665
Method:                 Least Squares   F-statistic:                     34.28
Date:                Thu, 22 Aug 2019   Prob (F-statistic):           3.48e-15
Time:                        15:48:59   Log-Likelihood:                -205.92
No. Observations:                  68   AIC:                             421.8
Df Residuals:                      63   BIC:                             432.9
Df Model:                           4                                         
Covariance Type:            nonrobust                                         
===============================================================================
                  coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept   -8484.7720   4664.146     -1.819      0.074   -1.78e+04     835.780
C(lg)[T.NL]    -2.2736      1.325     -1.716      0.091      -4.922       0.375
ln_h           -1.3542      0.875     -1.547      0.127      -3.103       0.395
year            4.2277      2.324      1.819      0.074      -0.417       8.872
g               0.1841      0.029      6.258      0.000       0.125       0.243
==============================================================================
Omnibus:                       10.875   Durbin-Watson:                   1.999
Prob(Omnibus):                  0.004   Jarque-Bera (JB):               17.298
Skew:                           0.537   Prob(JB):                     0.000175
Kurtosis:                       5.225   Cond. No.                     1.49e+07
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.49e+07. This might indicate that there are
strong multicollinearity or other numerical problems.

unix 的 pipe 與后來(lái)出現(xiàn)的 dplyrmagrittr 啟發(fā)了pipe 方法,在此炼绘,引入了 R 語(yǔ)言里用于讀取 pipe 的操作符 (%>%)嗅战。pipe 的實(shí)現(xiàn)思路非常清晰,仿佛 Python 源生的一樣俺亮。強(qiáng)烈建議大家閱讀 pipe() 的源代碼驮捍。

行列級(jí)函數(shù)應(yīng)用

apply() 方法可以沿著 DataFrame 的軸應(yīng)用任何函數(shù),比如铅辞,描述性統(tǒng)計(jì)方法厌漂,該方法支持 axis 參數(shù)萨醒。

In [141]: df.apply(np.mean)
Out[141]: 
one      0.811094
two      1.360588
three    0.187958
dtype: float64

In [142]: df.apply(np.mean, axis=1)
Out[142]: 
a    1.583749
b    0.734929
c    1.133683
d   -0.166914
dtype: float64

In [143]: df.apply(lambda x: x.max() - x.min())
Out[143]: 
one      1.051928
two      1.632779
three    1.840607
dtype: float64

In [144]: df.apply(np.cumsum)
Out[144]: 
        one       two     three
a  1.394981  1.772517       NaN
b  1.738035  3.684640 -0.050390
c  2.433281  5.163008  1.177045
d       NaN  5.442353  0.563873

In [145]: df.apply(np.exp)
Out[145]: 
        one       two     three
a  4.034899  5.885648       NaN
b  1.409244  6.767440  0.950858
c  2.004201  4.385785  3.412466
d       NaN  1.322262  0.541630

apply() 方法還支持通過(guò)函數(shù)名字符串調(diào)用函數(shù)斟珊。

In [146]: df.apply('mean')
Out[146]: 
one      0.811094
two      1.360588
three    0.187958
dtype: float64

In [147]: df.apply('mean', axis=1)
Out[147]: 
a    1.583749
b    0.734929
c    1.133683
d   -0.166914
dtype: float64

默認(rèn)情況下,apply() 調(diào)用的函數(shù)返回的類(lèi)型會(huì)影響 DataFrame.apply 輸出結(jié)果的類(lèi)型富纸。

  • 函數(shù)返回的是 Series 時(shí)囤踩,最終輸出的結(jié)果是 DataFrame。輸出的列與函數(shù)返回的 Series 索引相匹配晓褪。

  • 函數(shù)返回其它任意類(lèi)型時(shí)堵漱,輸出結(jié)果是 Series

result_type 會(huì)覆蓋默認(rèn)行為涣仿,該參數(shù)有三個(gè)選項(xiàng):reduce勤庐、broadcastexpand好港。這些選項(xiàng)決定了列表型返回值是否擴(kuò)展為 DataFrame愉镰。

用好 apply() 可以了解數(shù)據(jù)集的很多信息。比如可以提取每列的最大值對(duì)應(yīng)的日期:

In [148]: tsdf = pd.DataFrame(np.random.randn(1000, 3), columns=['A', 'B', 'C'],
   .....:                     index=pd.date_range('1/1/2000', periods=1000))
   .....: 

In [149]: tsdf.apply(lambda x: x.idxmax())
Out[149]: 
A   2000-08-06
B   2001-01-18
C   2001-07-18
dtype: datetime64[ns]

還可以向 apply() 方法傳遞額外的參數(shù)與關(guān)鍵字參數(shù)钧汹。比如下例中要應(yīng)用的這個(gè)函數(shù):

def subtract_and_divide(x, sub, divide=1):
    return (x - sub) / divide

可以用下列方式應(yīng)用該函數(shù):

df.apply(subtract_and_divide, args=(5,), divide=3)

為每行或每列執(zhí)行 Series 方法的功能也很實(shí)用:

In [150]: tsdf
Out[150]: 
                   A         B         C
2000-01-01 -0.158131 -0.232466  0.321604
2000-01-02 -1.810340 -3.105758  0.433834
2000-01-03 -1.209847 -1.156793 -0.136794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08 -0.653602  0.178875  1.008298
2000-01-09  1.007996  0.462824  0.254472
2000-01-10  0.307473  0.600337  1.643950

In [151]: tsdf.apply(pd.Series.interpolate)
Out[151]: 
                   A         B         C
2000-01-01 -0.158131 -0.232466  0.321604
2000-01-02 -1.810340 -3.105758  0.433834
2000-01-03 -1.209847 -1.156793 -0.136794
2000-01-04 -1.098598 -0.889659  0.092225
2000-01-05 -0.987349 -0.622526  0.321243
2000-01-06 -0.876100 -0.355392  0.550262
2000-01-07 -0.764851 -0.088259  0.779280
2000-01-08 -0.653602  0.178875  1.008298
2000-01-09  1.007996  0.462824  0.254472
2000-01-10  0.307473  0.600337  1.643950

apply() 有一個(gè)參數(shù) raw丈探,默認(rèn)值為 False,在應(yīng)用函數(shù)前拔莱,使用該參數(shù)可以將每行或列轉(zhuǎn)換為 Series碗降。該參數(shù)為 True 時(shí),傳遞的函數(shù)接收 ndarray 對(duì)象塘秦,若不需要索引功能讼渊,這種操作能顯著提高性能。

聚合 API

0.20.0 版新增尊剔。

聚合 API 可以快速精偿、簡(jiǎn)潔地執(zhí)行多個(gè)聚合操作。Pandas 對(duì)象支持多個(gè)類(lèi)似的 API,如 groupby API笔咽、window functions API搔预、resample API。聚合函數(shù)為DataFrame.aggregate()叶组,它的別名是 DataFrame.agg()拯田。

這里使用與前例類(lèi)似的 DataFrame

In [152]: tsdf = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'],
   .....:                     index=pd.date_range('1/1/2000', periods=10))
   .....: 

In [153]: tsdf.iloc[3:7] = np.nan

In [154]: tsdf
Out[154]: 
                   A         B         C
2000-01-01  1.257606  1.004194  0.167574
2000-01-02 -0.749892  0.288112 -0.757304
2000-01-03 -0.207550 -0.298599  0.116018
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.814347 -0.257623  0.869226
2000-01-09 -0.250663 -1.206601  0.896839
2000-01-10  2.169758 -1.333363  0.283157

應(yīng)用單個(gè)函數(shù)時(shí),該操作與 apply() 等效甩十,這里也可以用字符串表示聚合函數(shù)名船庇。下面的聚合函數(shù)輸出的結(jié)果為 Series

In [155]: tsdf.agg(np.sum)
Out[155]: 
A    3.033606
B   -1.803879
C    1.575510
dtype: float64

In [156]: tsdf.agg('sum')
Out[156]: 
A    3.033606
B   -1.803879
C    1.575510
dtype: float64

# 因?yàn)閼?yīng)用的是單個(gè)函數(shù),該操作與`.sum()` 是等效的
In [157]: tsdf.sum()
Out[157]: 
A    3.033606
B   -1.803879
C    1.575510
dtype: float64

對(duì) Series 進(jìn)行單個(gè)聚合操作侣监,返回的是標(biāo)量值:

In [158]: tsdf.A.agg('sum')
Out[158]: 3.033606102414146

多函數(shù)聚合

還可以用列表形式傳遞多個(gè)聚合函數(shù)鸭轮。每個(gè)函數(shù)在輸出結(jié)果 DataFrame 里以行的形式顯示,行名是每個(gè)聚合函數(shù)的函數(shù)名橄霉。

In [159]: tsdf.agg(['sum'])
Out[159]: 
            A         B        C
sum  3.033606 -1.803879  1.57551

多個(gè)函數(shù)輸出多行:

In [160]: tsdf.agg(['sum', 'mean'])
Out[160]: 
             A         B         C
sum   3.033606 -1.803879  1.575510
mean  0.505601 -0.300647  0.262585

對(duì)于 Series窃爷,多個(gè)函數(shù)返回的結(jié)果也是 Series,其索引為函數(shù)名:

In [161]: tsdf.A.agg(['sum', 'mean'])
Out[161]: 
sum     3.033606
mean    0.505601
Name: A, dtype: float64

傳遞 lambda 函數(shù)時(shí)姓蜂,輸出名為 <lambda> 的行:

In [162]: tsdf.A.agg(['sum', lambda x: x.mean()])
Out[162]: 
sum         3.033606
<lambda>    0.505601
Name: A, dtype: float64

應(yīng)用自定義函數(shù)時(shí)按厘,則該函數(shù)名為輸出結(jié)果的行名:

In [163]: def mymean(x):
   .....:     return x.mean()
   .....: 

In [164]: tsdf.A.agg(['sum', mymean])
Out[164]: 
sum       3.033606
mymean    0.505601
Name: A, dtype: float64

用字典實(shí)現(xiàn)聚合

指定為哪些列應(yīng)用哪些聚合函數(shù)時(shí),需要把包含列名與標(biāo)量(或標(biāo)量列表)的字典傳遞給 DataFrame.agg钱慢。

注意:這里輸出結(jié)果的順序不是固定的逮京,要想讓輸出順序與輸入順序一致,請(qǐng)使用 OrderedDict束莫。

In [165]: tsdf.agg({'A': 'mean', 'B': 'sum'})
Out[165]: 
A    0.505601
B   -1.803879
dtype: float64

輸入的參數(shù)是列表時(shí)懒棉,輸出結(jié)果為 DataFrame,并以矩陣形式顯示所有聚合函數(shù)的計(jì)算結(jié)果览绿,且輸出結(jié)果由所有唯一函數(shù)組成策严。未執(zhí)行聚合操作的列輸出結(jié)果為 NaN 值:

In [166]: tsdf.agg({'A': ['mean', 'min'], 'B': 'sum'})
Out[166]: 
             A         B
mean  0.505601       NaN
min  -0.749892       NaN
sum        NaN -1.803879

多種 Dtype

DataFrame 里包含不能執(zhí)行聚合操作的多種 Dtype 時(shí),.agg 只計(jì)算可以執(zhí)行聚合的列挟裂。這與 groupby.agg 操作類(lèi)似:

In [167]: mdf = pd.DataFrame({'A': [1, 2, 3],
   .....:                     'B': [1., 2., 3.],
   .....:                     'C': ['foo', 'bar', 'baz'],
   .....:                     'D': pd.date_range('20130101', periods=3)})
   .....: 

In [168]: mdf.dtypes
Out[168]: 
A             int64
B           float64
C            object
D    datetime64[ns]
dtype: object
In [169]: mdf.agg(['min', 'sum'])
Out[169]: 
     A    B          C          D
min  1  1.0        bar 2013-01-01
sum  6  6.0  foobarbaz        NaT

自定義 Describe

.agg() 可以輕松地創(chuàng)建與內(nèi)置 describe 函數(shù)類(lèi)似的自定義 describe 函數(shù)享钞。

In [170]: from functools import partial

In [171]: q_25 = partial(pd.Series.quantile, q=0.25)

In [172]: q_25.__name__ = '25%'

In [173]: q_75 = partial(pd.Series.quantile, q=0.75)

In [174]: q_75.__name__ = '75%'

In [175]: tsdf.agg(['count', 'mean', 'std', 'min', q_25, 'median', q_75, 'max'])
Out[175]: 
               A         B         C
count   6.000000  6.000000  6.000000
mean    0.505601 -0.300647  0.262585
std     1.103362  0.887508  0.606860
min    -0.749892 -1.333363 -0.757304
25%    -0.239885 -0.979600  0.128907
median  0.303398 -0.278111  0.225365
75%     1.146791  0.151678  0.722709
max     2.169758  1.004194  0.896839

Transform API

0.20.0 版新增

transform() 方法返回的結(jié)果與原始數(shù)據(jù)具有同樣索引诀蓉,且大小相同栗竖。這個(gè) API 支持同時(shí)處理多種操作,不用一個(gè)一個(gè)操作渠啤,且該 API 與 .agg API 類(lèi)似狐肢。

下面先創(chuàng)建一個(gè) DataFrame:

In [176]: tsdf = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'],
   .....:                     index=pd.date_range('1/1/2000', periods=10))
   .....: 

In [177]: tsdf.iloc[3:7] = np.nan

In [178]: tsdf
Out[178]: 
                   A         B         C
2000-01-01 -0.428759 -0.864890 -0.675341
2000-01-02 -0.168731  1.338144 -1.279321
2000-01-03 -1.621034  0.438107  0.903794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374 -1.240447 -0.201052
2000-01-09 -0.157795  0.791197 -1.144209
2000-01-10 -0.030876  0.371900  0.061932

這里轉(zhuǎn)換的是整個(gè) DataFrame。.transform() 支持 Numpy 函數(shù)沥曹、字符串函數(shù)及自定義函數(shù)份名。

In [179]: tsdf.transform(np.abs)
Out[179]: 
                   A         B         C
2000-01-01  0.428759  0.864890  0.675341
2000-01-02  0.168731  1.338144  1.279321
2000-01-03  1.621034  0.438107  0.903794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374  1.240447  0.201052
2000-01-09  0.157795  0.791197  1.144209
2000-01-10  0.030876  0.371900  0.061932

In [180]: tsdf.transform('abs')
Out[180]: 
                   A         B         C
2000-01-01  0.428759  0.864890  0.675341
2000-01-02  0.168731  1.338144  1.279321
2000-01-03  1.621034  0.438107  0.903794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374  1.240447  0.201052
2000-01-09  0.157795  0.791197  1.144209
2000-01-10  0.030876  0.371900  0.061932

In [181]: tsdf.transform(lambda x: x.abs())
Out[181]: 
                   A         B         C
2000-01-01  0.428759  0.864890  0.675341
2000-01-02  0.168731  1.338144  1.279321
2000-01-03  1.621034  0.438107  0.903794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374  1.240447  0.201052
2000-01-09  0.157795  0.791197  1.144209
2000-01-10  0.030876  0.371900  0.061932

這里的 transform() 接受單個(gè)函數(shù)碟联;與 ufunc 等效。

In [182]: np.abs(tsdf)
Out[182]: 
                   A         B         C
2000-01-01  0.428759  0.864890  0.675341
2000-01-02  0.168731  1.338144  1.279321
2000-01-03  1.621034  0.438107  0.903794
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374  1.240447  0.201052
2000-01-09  0.157795  0.791197  1.144209
2000-01-10  0.030876  0.371900  0.061932

.transform()Series 傳遞單個(gè)函數(shù)時(shí)僵腺,返回的結(jié)果也是單個(gè) Series鲤孵。

In [183]: tsdf.A.transform(np.abs)
Out[183]: 
2000-01-01    0.428759
2000-01-02    0.168731
2000-01-03    1.621034
2000-01-04         NaN
2000-01-05         NaN
2000-01-06         NaN
2000-01-07         NaN
2000-01-08    0.254374
2000-01-09    0.157795
2000-01-10    0.030876
Freq: D, Name: A, dtype: float64

多函數(shù) Transform

transform() 調(diào)用多個(gè)函數(shù)時(shí),將生成多重索引 DataFrame辰如。第一層是原始數(shù)據(jù)集的列名普监;第二層是 transform() 調(diào)用的函數(shù)名。

In [184]: tsdf.transform([np.abs, lambda x: x + 1])
Out[184]: 
                   A                   B                   C          
            absolute  <lambda>  absolute  <lambda>  absolute  <lambda>
2000-01-01  0.428759  0.571241  0.864890  0.135110  0.675341  0.324659
2000-01-02  0.168731  0.831269  1.338144  2.338144  1.279321 -0.279321
2000-01-03  1.621034 -0.621034  0.438107  1.438107  0.903794  1.903794
2000-01-04       NaN       NaN       NaN       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN       NaN       NaN       NaN
2000-01-08  0.254374  1.254374  1.240447 -0.240447  0.201052  0.798948
2000-01-09  0.157795  0.842205  0.791197  1.791197  1.144209 -0.144209
2000-01-10  0.030876  0.969124  0.371900  1.371900  0.061932  1.061932

為 Series 應(yīng)用多個(gè)函數(shù)時(shí)琉兜,輸出結(jié)果是 DataFrame凯正,列名是 transform() 調(diào)用的函數(shù)名。

In [185]: tsdf.A.transform([np.abs, lambda x: x + 1])
Out[185]: 
            absolute  <lambda>
2000-01-01  0.428759  0.571241
2000-01-02  0.168731  0.831269
2000-01-03  1.621034 -0.621034
2000-01-04       NaN       NaN
2000-01-05       NaN       NaN
2000-01-06       NaN       NaN
2000-01-07       NaN       NaN
2000-01-08  0.254374  1.254374
2000-01-09  0.157795  0.842205
2000-01-10  0.030876  0.969124

用字典執(zhí)行 transform 操作

函數(shù)字典可以為每列執(zhí)行指定 transform() 操作豌蟋。

In [186]: tsdf.transform({'A': np.abs, 'B': lambda x: x + 1})
Out[186]: 
                   A         B
2000-01-01  0.428759  0.135110
2000-01-02  0.168731  2.338144
2000-01-03  1.621034  1.438107
2000-01-04       NaN       NaN
2000-01-05       NaN       NaN
2000-01-06       NaN       NaN
2000-01-07       NaN       NaN
2000-01-08  0.254374 -0.240447
2000-01-09  0.157795  1.791197
2000-01-10  0.030876  1.371900

transform() 的參數(shù)是列表字典時(shí)廊散,生成的是以 transform() 調(diào)用的函數(shù)為名的多重索引 DataFrame。

In [187]: tsdf.transform({'A': np.abs, 'B': [lambda x: x + 1, 'sqrt']})
Out[187]: 
                   A         B          
            absolute  <lambda>      sqrt
2000-01-01  0.428759  0.135110       NaN
2000-01-02  0.168731  2.338144  1.156782
2000-01-03  1.621034  1.438107  0.661897
2000-01-04       NaN       NaN       NaN
2000-01-05       NaN       NaN       NaN
2000-01-06       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN
2000-01-08  0.254374 -0.240447       NaN
2000-01-09  0.157795  1.791197  0.889493
2000-01-10  0.030876  1.371900  0.609836

元素級(jí)函數(shù)應(yīng)用

并非所有函數(shù)都能矢量化梧疲,即接受 Numpy 數(shù)組允睹,返回另一個(gè)數(shù)組或值,DataFrame 的 applymap() 及 Series 的 map() 往声,支持任何接收單個(gè)值并返回單個(gè)值的 Python 函數(shù)擂找。

示例如下:

In [188]: df4
Out[188]: 
        one       two     three
a  1.394981  1.772517       NaN
b  0.343054  1.912123 -0.050390
c  0.695246  1.478369  1.227435
d       NaN  0.279344 -0.613172

In [189]: def f(x):
   .....:     return len(str(x))
   .....: 

In [190]: df4['one'].map(f)
Out[190]: 
a    18
b    19
c    18
d     3
Name: one, dtype: int64

In [191]: df4.applymap(f)
Out[191]: 
   one  two  three
a   18   17      3
b   19   18     20
c   18   18     16
d    3   19     19

Series.map() 還有個(gè)功能戳吝,可以“連接”或“映射”第二個(gè) Series 定義的值浩销。這與 merging/joining 功能聯(lián)系非常緊密:

In [192]: s = pd.Series(['six', 'seven', 'six', 'seven', 'six'],
   .....:               index=['a', 'b', 'c', 'd', 'e'])
   .....: 

In [193]: t = pd.Series({'six': 6., 'seven': 7.})

In [194]: s
Out[194]: 
a      six
b    seven
c      six
d    seven
e      six
dtype: object

In [195]: s.map(t)
Out[195]: 
a    6.0
b    7.0
c    6.0
d    7.0
e    6.0
dtype: float64

Pandas 中文官檔 ~ 基礎(chǔ)用法1
Pandas 中文官檔 ~ 基礎(chǔ)用法2
Pandas 中文官檔 ~ 基礎(chǔ)用法3
Pandas 中文官檔 ~ 基礎(chǔ)用法4
Pandas 中文官檔 ~ 基礎(chǔ)用法5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市听哭,隨后出現(xiàn)的幾起案子慢洋,更是在濱河造成了極大的恐慌,老刑警劉巖陆盘,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件普筹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡隘马,警方通過(guò)查閱死者的電腦和手機(jī)太防,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酸员,“玉大人蜒车,你說(shuō)我怎么就攤上這事♂`拢” “怎么了酿愧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)邀泉。 經(jīng)常有香客問(wèn)我嬉挡,道長(zhǎng)钝鸽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任庞钢,我火速辦了婚禮拔恰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘基括。我一直安慰自己仁连,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布阱穗。 她就那樣靜靜地躺著饭冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揪阶。 梳的紋絲不亂的頭發(fā)上昌抠,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音鲁僚,去河邊找鬼炊苫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冰沙,可吹牛的內(nèi)容都是我干的侨艾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拓挥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唠梨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起侥啤,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤当叭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盖灸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚁鳖,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年赁炎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醉箕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徙垫,死狀恐怖讥裤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情松邪,我是刑警寧澤坞琴,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站逗抑,受9級(jí)特大地震影響剧辐,放射性物質(zhì)發(fā)生泄漏寒亥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一荧关、第九天 我趴在偏房一處隱蔽的房頂上張望溉奕。 院中可真熱鬧,春花似錦忍啤、人聲如沸加勤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鳄梅。三九已至,卻和暖如春未檩,著一層夾襖步出監(jiān)牢的瞬間戴尸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工冤狡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孙蒙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓悲雳,卻偏偏與公主長(zhǎng)得像挎峦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子合瓢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容