溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pandas基本文本數(shù)據(jù)的處理方法

發(fā)布時(shí)間:2021-08-17 20:01:55 來源:億速云 閱讀:124 作者:chen 欄目:云計(jì)算

本篇內(nèi)容主要講解“Pandas基本文本數(shù)據(jù)的處理方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Pandas基本文本數(shù)據(jù)的處理方法”吧!

1.# 系列和索引配有一組字符串處理方法,使它容易操作數(shù)組的每個(gè)元素?;蛟S最重要的是,這些方法自動(dòng)排除失蹤/ NA值。這里有一些字符串方法的例子:In [1]: s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])#小寫方法In [2]: s.str.lower()
Out[2]: 
0       a1       b2       c3    aaba4    baca5     NaN6    caba7     dog8     cat
dtype: object#大寫方法In [3]: s.str.upper()
Out[3]: 
0       A1       B2       C3    AABA4    BACA5     NaN6    CABA7     DOG8     CAT
dtype: object#顯示字符串的長度In [4]: s.str.len()
Out[4]: 
0    1.01    1.02    1.03    4.04    4.05    NaN6    4.07    3.08    3.0dtype: float64

In [5]: idx = pd.Index([' jack', 'jill ', ' jesse ', 'frank'])#去除兩邊的空格In [6]: idx.str.strip()
Out[6]: Index([u'jack', u'jill', u'jesse', u'frank'], dtype='object')#去除左邊的空格In [7]: idx.str.lstrip()
Out[7]: Index([u'jack', u'jill ', u'jesse ', u'frank'], dtype='object')#去除右邊的空格In [8]: idx.str.rstrip()
Out[8]: Index([u' jack', u'jill', u' jesse', u'frank'], dtype='object')# df.columns一個(gè)index對(duì)象,所以我們科研用.str存取器In [9]: df = pd.DataFrame(randn(3, 2), columns=[' Column A ', ' Column B '],
   ...:                   index=range(3))
   ...: 

In [10]: df
Out[10]: 
    Column A    Column B 
0    0.017428    0.0390491   -2.240248    0.8478592   -1.342107    0.368828#去除列名的空格In [11]: df.columns.str.strip()
Out[11]: Index([u'Column A', u'Column B'], dtype='object')#列名小寫In [12]: df.columns.str.lower()
Out[12]: Index([u' column a ', u' column b '], dtype='object')#將列名先去空,再小寫,再將空格替換為"_"In [13]: df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
In [14]: df
Out[14]: 
   column_a  column_b0  0.017428  0.0390491 -2.240248  0.8478592 -1.342107  0.3688282.#拆分和替換字符In [15]: s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])#以_拆分,返回的是列表In [16]: s2.str.split('_')
Out[16]: 
0    [a, b, c]1    [c, d, e]2          NaN3    [f, g, h]
dtype: object#元素可以通過str.get()方法來獲取In [17]: s2.str.split('_').str.get(1)
Out[17]: 
0      b1      d2    NaN3      g
dtype: object#也可以通過str[]來獲取In [18]: s2.str.split('_').str[1]
Out[18]: 
0      b1      d2    NaN3      g
dtype: object#可以通過設(shè)置expand參數(shù)直接返回一個(gè)數(shù)據(jù)框In [19]: s2.str.split('_', expand=True)
Out[19]: 
     0     1     20    a     b     c1    c     d     e2  NaN  None  None3    f     g     h#可以通過設(shè)置n參數(shù)來設(shè)置分割點(diǎn)的個(gè)數(shù)In [20]: s2.str.split('_', expand=True, n=1)
Out[20]: 
     0     10    a   b_c1    c   d_e2  NaN  None3    f   g_h#rsplit想對(duì)與split來說是從相反的方向(reverse direction)來分割I(lǐng)n [21]: s2.str.rsplit('_', expand=True, n=1)
Out[21]: 
     0     10  a_b     c1  c_d     e2  NaN  None3  f_g     h#像replace和findall這樣的方法可以使用正則表達(dá)式In [22]: s3 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
   ....:                '', np.nan, 'CABA', 'dog', 'cat'])
   ....: 

In [23]: s3
Out[23]: 
0       A1       B2       C3    Aaba4    Baca5        6     NaN7    CABA8     dog9     cat
dtype: object

In [24]: s3.str.replace('^.a|dog', 'XX-XX ', case=False)
Out[24]: 
0           A1           B2           C3    XX-XX ba4    XX-XX ca5            6         NaN7    XX-XX BA8      XX-XX 
9     XX-XX t
dtype: object3.#通過str[]來索引In [29]: s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan,
   ....:                'CABA', 'dog', 'cat'])
   ....: 

In [30]: s.str[0]
Out[30]: 
0      A1      B2      C3      A4      B5    NaN6      C7      d8      c
dtype: object

In [31]: s.str[1]
Out[31]: 
0    NaN1    NaN2    NaN3      a4      a5    NaN6      A7      o8      a
dtype: object4.#提取字符串#如果提取的規(guī)則結(jié)果有多組,則會(huì)返回?cái)?shù)據(jù)框,不匹配的返回NaNIn [32]: pd.Series(['a1', 'b2', 'c3']).str.extract('([ab])(\d)', expand=False)
Out[32]: 
     0    10    a    11    b    22  NaN  NaN#注意正則表達(dá)式中的任何捕獲組名稱將用于列名,否則捕獲的組名將被當(dāng)作列名In [33]: pd.Series(['a1', 'b2', 'c3']).str.extract('(?P<letter>[ab])(?P<digit>\d)', expand=False)
Out[33]: 
  letter digit0      a     11      b     22    NaN   NaN#參數(shù)expand=True在一組返回值的情況下,返回?cái)?shù)據(jù)框In [35]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\d)', expand=True)
Out[35]: 
     00    11    22  NaN#參數(shù)expand=False在一組返回值的情況下,返回序列(Series)In [36]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\d)', expand=False)
Out[36]: 
0      11      22    NaN
dtype: object#參數(shù)expand=True作用在索引上時(shí),一組數(shù)據(jù)返回?cái)?shù)據(jù)框In [37]: s = pd.Series(["a1", "b2", "c3"], ["A11", "B22", "C33"])

In [38]: s
Out[38]: 
A11    a1
B22    b2
C33    c3
dtype: object

In [39]: s.index.str.extract("(?P<letter>[a-zA-Z])", expand=True)
Out[39]: 
  letter0      A1      B2      C#參數(shù)expand=False作用在索引上時(shí),一組數(shù)據(jù)返回索引In [40]: s.index.str.extract("(?P<letter>[a-zA-Z])", expand=False)
Out[40]: Index([u'A', u'B', u'C'], dtype='object', name=u'letter')#下圖表示了在expand=False時(shí),各種情況下index,Series返回值的情況 1 group    >1 group
Index      Index    ValueError
Series    Series    DataFrame5.#提取所有匹配的字符串#extract只返回第一個(gè)匹配到的字符In [42]: s = pd.Series(["a1a2", "b1", "c1"], index=["A", "B", "C"])
In [43]: s
Out[43]: 
A    a1a2
B      b1
C      c1
dtype: object
In [44]: two_groups = '(?P<letter>[a-z])(?P<digit>[0-9])'In [45]: s.str.extract(two_groups, expand=True)
Out[45]: 
  letter digit
A      a     1B      b     1C      c     1#extractall將匹配所有返回的字符In [46]: s.str.extractall(two_groups)
Out[46]: 
        letter digit
  match             
A 0          a     1
  1          a     2B 0          b     1C 0          c     16.#測(cè)試是否包含某規(guī)則In [56]: pattern = r'[a-z][0-9]'In [57]: pd.Series(['1', '2', '3a', '3b', '03c']).str.contains(pattern)
Out[57]: 
0    False1    False2    False3    False4    Falsedtype: bool7. #match, contains, startswith, and endswith可以設(shè)置缺失值是True還是falseIn [59]: s4 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])

In [60]: s4.str.contains('A', na=False)
Out[60]: 
0     True1    False2    False3     True4    False5    False6     True7    False8    Falsedtype: bool8.#提取偽變量In [61]: s = pd.Series(['a', 'a|b', np.nan, 'a|c'])

In [62]: s.str.get_dummies(sep='|')
Out[62]: 
   a  b  c0  1  0  01  1  1  02  0  0  03  1  0  1#獲取復(fù)雜索引In [63]: idx = pd.Index(['a', 'a|b', np.nan, 'a|c'])

In [64]: idx.str.get_dummies(sep='|')
Out[64]: 
MultiIndex(levels=[[0, 1], [0, 1], [0, 1]],
           labels=[[1, 1, 0, 1], [0, 1, 0, 0], [0, 0, 0, 1]],
           names=[u'a', u'b', u'c'])

到此,相信大家對(duì)“Pandas基本文本數(shù)據(jù)的處理方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI