問(wèn)題
In [1]: import re
...: import pandas as pd
...: data = {
...: 'Dave': 'dave@google.com',
...: 'Steve': 'steve@gmail.com',
...: 'Rob': 'rob@gmail.com',
...: 'Wes': np.nan
...: }
...: data = pd.Series(data)
...: pattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{2,4})'
...: matches = data.str.match(pattern, flags=re.IGNORECASE)
In [2]: matches
Out[2]:
Dave True
Steve True
Rob True
Wes NaN
dtype: object
In [3]: matches.str.get(1)
Out[3]:
Dave NaN
Steve NaN
Rob NaN
Wes NaN
dtype: float64
In [4]: matches.str[0]
Out[4]:
Dave NaN
Steve NaN
Rob NaN
Wes NaN
dtype: float64
看到為什么matches已經(jīng)匹配到數(shù)據(jù)嫡霞,但是Out[3]
和 Out[4]
獲取數(shù)據(jù)的時(shí)候還是顯示NaN呢撰洗?
我的解題思路
- 首先荆陆,我做了一件事,先明白當(dāng)前是什么對(duì)象集侯,我們看到
matches
是一個(gè)pandas.core.series.Series
對(duì)象
In [5]: type(matches)
Out[5]: pandas.core.series.Series
然后被啼,Google搜索關(guān)鍵字
pandas series matche
,瞬間拿到官網(wǎng)解釋的鏈接 pandas.Series.str.match 點(diǎn)擊跳轉(zhuǎn) 官方解釋:確定每個(gè)字符串是否與正則表達(dá)式匹配棠枉。這里很明顯是沒(méi)有問(wèn)題的浓体,在Out[2]
的輸出中我們看到了匹配是正確的。接著辈讶,Google搜索關(guān)鍵字
pandas series str get
命浴,再次拿到官方文檔 pandas.Series.str.get 點(diǎn)擊跳轉(zhuǎn)。官方解釋:從指定位置的每個(gè)組件中提取元素贱除。這好像也沒(méi)有毛病生闲,但為什么 matches.str.get(1)Out[3]
和 matches.str[0]Out[4]
輸出是NaN呢?很神奇的一個(gè)問(wèn)題最后月幌,我也比較粗心碍讯,沒(méi)注意看examples例子,后來(lái)才發(fā)現(xiàn) pandas.Series.str.get 點(diǎn)擊跳轉(zhuǎn) 有例子扯躺,我對(duì)例子進(jìn)行了補(bǔ)充捉兴,加入
True
和False
。
In [6]: s = pd.Series([
...: "String",
...: (1, 2, 3),
...: ["a", "b", "c"],
...: 123,
...: -456,
...: { 1: "Hello", "2": "World" },
...: True,
...: False
...: ])
In [7]: type(s) # 對(duì)比前面的In [5]录语,matches和現(xiàn)在的s是一樣的類型
Out[7]: pandas.core.series.Series
In [8]: s.str.get(1)
Out[8]:
0 t # "String",
1 2 # (1, 2, 3),
2 b # ["a", "b", "c"],
3 NaN # 123, 不可迭代
4 NaN # -456, 不可迭代
5 Hello # { 1: "Hello", "2": "World" },
6 NaN # True, 不可迭代
7 NaN # False, 不可迭代
dtype: object
其實(shí)并非所有對(duì)象 在 pandas.Series.str.get
方法調(diào)用下都能獲取倍啥,必須是可迭代的對(duì)象才能獲取
結(jié)論
pandas.core.series.Series
對(duì)象 如果想調(diào)用 pandas.Series.str.get
方法獲取數(shù)據(jù),Series
的數(shù)據(jù)必須是可迭代的(字符串澎埠,元組虽缕,列表,字典)
如果想了解更多Python面向?qū)ο笫г荩梢圆榭?我以前想的文章 Python入門 - 面向?qū)ο笏枷?小白入門詳解