程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

pandas 向量化字符串操作

編輯:Python

文章目錄

  • 1.簡介
  • 2. 示例代碼
    • 2.1 小試一刀
  • 2.2 pandas 字符串方法列表
  • 2.3 pandas 字符串向量化操作支持正則表達式
    • 2.4 其它字符串方法

1.簡介

  1. 使用numpy與pandas 對數組元素進行操作,向量化操作簡化了純數值的數組操作語法–無需關注數據長度或維度,只關心需要的操作

2. 示例代碼

2.1 小試一刀

[email protected]-019 MINGW64 /
$ ipython
Python 3.6.7 (default, Jul 2 2019, 02:21:41) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import numpy as np
In [2]: import pandas as pd
# 示例數據(常規數據)
In [3]: data = ['peter', 'Paul', 'MARY', 'GuiDO']
# 數據值正常時的操作方法
In [4]: [s.capitalize() for s in data]
Out[4]: ['Peter', 'Paul', 'Mary', 'Guido']
# 實際上, 這才是我們經常碰到的常規數據, 對吧? :)
In [5]: data = ['peter', 'Paul', 'MARY', 'GuiDO', None]
# 這種處理方法就不太友好了
In [6]: [s.capitalize() for s in data]
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-bb1b424b25b0> in <module>
----> 1 [s.capitalize() for s in data]
<ipython-input-6-bb1b424b25b0> in <listcomp>(.0)
----> 1 [s.capitalize() for s in data]
AttributeError: 'NoneType' object has no attribute 'capitalize'
In [7]: names = pd.Series(data)
In [8]: names
Out[8]:
0 peter
1 Paul
2 MARY
3 GuiDO
4 None
dtype: object
# 這是正經的向量化字符串操作, 有沒有很6. 只需要關注操作的方法即可, 不用操心異常數值.
In [9]: names.str.capitalize()
Out[9]:
0 Peter
1 Paul
2 Mary
3 Guido
4 None
dtype: object

2.2 pandas 字符串方法列表

  • 在pandas中, 可以對字符串進行向量化操作的方法都有哪些呢?
    len()lower()translate()islower()
    ljust()upper()startswith()isupper()
    rjust()find()endswith()isnumeric()
    center()rfind()isalnum()isdecimal()
    zfill()index()isalpha()split()
    strip()rindex()isdigit()rsplit()
    rstrip()capitalize()isspace()partition()
    lstrip()swapcase()istitle()rpartition()
  • 2.2.1 代碼示例
In [10]: monte = pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam', 'Eric idle'])
In [11]: monte
Out[11]:
0 Graham Chapman
1 John Cleese
2 Terry Gilliam
3 Eric idle
dtype: object
# 返回全小寫
In [12]: monte.str.lower()
Out[12]:
0 graham chapman
1 john cleese
2 terry gilliam
3 eric idle
dtype: object
# 返回int型
In [13]: monte.str.len()
Out[13]:
0 14
1 11
2 13
3 9
dtype: int64
# 返回布爾型
In [14]: monte.str.startswith('T')
Out[14]:
0 False
1 False
2 True
3 False
dtype: bool
# 返回list
In [15]: monte.str.split()
Out[15]:
0 [Graham, Chapman]
1 [John, Cleese]
2 [Terry, Gilliam]
3 [Eric, idle]
dtype: object

2.3 pandas 字符串向量化操作支持正則表達式

  • 2.3.1 pandas 支持正則表達式操作與python的re 模塊相通, 關系如下:
方法描述match()對每個元素調用re.match(), 返回布爾類型值extract()對每個元素調用re.match(), 返回匹配的字符串組(groups)findall()對每個元素調用re.findall()replace()用正則模式替換字符串contains()對每個元素調用re.search(), 返回布爾類型值count()計算符合正則模式的字符串的數量split()等價於str.split(), 支持正則表達式rsplit()等價於str.rsplit(), 支持正則表達式
  • 2.3.2 代碼示例
In [16]: monte.str.extract('([A-Za-z]+)')
Out[16]:
0
0 Graham
1 John
2 Terry
3 Eric
In [17]: monte.str.findall(r'^[^AEIOU].*[^aeiou]$')
Out[17]:
0 [Graham Chapman]
1 []
2 [Terry Gilliam]
3 []
dtype: object

2.4 其它字符串方法

  • 2.4.1 方法列表
方法描述get()獲取元素索引位置上的值, 索引從0開始slice()對元素進行切片取值slice_replace()對元素進行切片替換cat()連接字符串repeat()重復元素normalize()將字符串轉換為Unicode規范形式pad()在字符串的左邊\ 右邊或兩邊增加空格wrap()將字符串按指定寬度換行join()用分隔符連接Series的每個元素get_dummies()按照分隔符提取每個元素的dummy變量, 轉換為獨熱(one-hot)編碼的DataFrame
  • 2.4.2 代碼示例

In [18]: monte.str[:3]
Out[18]:
0 Gra
1 Joh
2 Ter
3 Eri
dtype: object
# 這兩種等效
In [19]: monte.str.slice(0, 3)
Out[19]:
0 Gra
1 Joh
2 Ter
3 Eri
dtype: object
In [20]: monte.str.get(3)
Out[20]:
0 h
1 n
2 r
3 c
dtype: object
# 這兩種操作方法等效
In [21]: monte.str[3]
Out[21]:
0 h
1 n
2 r
3 c
dtype: object
# 綜合運用
In [22]: monte.str.split().str.get(-1)
Out[22]:
0 Chapman
1 Cleese
2 Gilliam
3 idle
dtype: object

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved