您好,登錄后才能下訂單哦!
本篇內容主要講解“Pandas基本文本數據的處理方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Pandas基本文本數據的處理方法”吧!
1.# 系列和索引配有一組字符串處理方法,使它容易操作數組的每個元素。或許最重要的是,這些方法自動排除失蹤/ 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一個index對象,所以我們科研用.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#可以通過設置expand參數直接返回一個數據框In [19]: s2.str.split('_', expand=True) Out[19]: 0 1 20 a b c1 c d e2 NaN None None3 f g h#可以通過設置n參數來設置分割點的個數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想對與split來說是從相反的方向(reverse direction)來分割In [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這樣的方法可以使用正則表達式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.#提取字符串#如果提取的規則結果有多組,則會返回數據框,不匹配的返回NaNIn [32]: pd.Series(['a1', 'b2', 'c3']).str.extract('([ab])(\d)', expand=False) Out[32]: 0 10 a 11 b 22 NaN NaN#注意正則表達式中的任何捕獲組名稱將用于列名,否則捕獲的組名將被當作列名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#參數expand=True在一組返回值的情況下,返回數據框In [35]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\d)', expand=True) Out[35]: 00 11 22 NaN#參數expand=False在一組返回值的情況下,返回序列(Series)In [36]: pd.Series(['a1', 'b2', 'c3']).str.extract('[ab](\d)', expand=False) Out[36]: 0 11 22 NaN dtype: object#參數expand=True作用在索引上時,一組數據返回數據框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#參數expand=False作用在索引上時,一組數據返回索引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時,各種情況下index,Series返回值的情況 1 group >1 group Index Index ValueError Series Series DataFrame5.#提取所有匹配的字符串#extract只返回第一個匹配到的字符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.#測試是否包含某規則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可以設置缺失值是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#獲取復雜索引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'])
到此,相信大家對“Pandas基本文本數據的處理方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。