91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pandas如何提取含有指定字符串的行

發布時間:2023-02-22 10:49:09 來源:億速云 閱讀:167 作者:iii 欄目:開發技術

今天小編給大家分享一下Pandas如何提取含有指定字符串的行的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

行的提取(選擇)方法

完全匹配

  • ==

部分匹配

  • str.contains():包含一個特定的字符串

    • 參數na:缺少值NaN處理

    • 參數case:大小寫我的處理

    • 參數regex:使用正則表達式模式

  • str.endswith():以特定字符串結尾

  • str.startswith():以特定的字符串開頭

  • str.match():匹配正則表達式模式

要提取部分匹配的行,可以使用pandas的(str.xxx())方法,根據指定條件提取的字符串方法。
這次以以下數據為例

import pandas as pd

df = pd.read_csv('./data/08/sample_pandas_normal.csv').head(3)
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

行的提取(選擇)方法

首先,展示如何從pandas.DataFrame中提取(選擇)行以獲得新的pandas.DataFrame。

使用布爾值的布爾列表(數組)或pandas.Series的話,只能提取(選擇)True行。

mask = [True, False, True]
df_mask = df[mask]
print(df_mask)
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70

因此,對于具有字符串元素的列,是否能夠獲得根據條件的布爾列表就足夠了。

完全匹配

==

如果元素與字符串完全匹配,則使用==獲取為True的pandas.Series。

print(df['state'] == 'CA')
# 0    False
# 1     True
# 2     True
# Name: state, dtype: bool

print(df[df['state'] == 'CA'])
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

部分匹配

str.contains():包含一個特定的字符串

pandas.Series字符串方法str.contains()允許獲取包含特定字符串的pandas.Series.

print(df['name'].str.contains('li'))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

print(df[df['name'].str.contains('li')])
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70

請注意,默認情況下,第一個參數中指定的字符串將作為正則表達式模式進行處理,如下所述。

參數na:缺少值NaN處理

如果元素是缺失值NaN,則默認情況下它將返回NaN而不是True或False。因此,使用pandas.Series提取該行是錯誤的。

df_nan = df.copy()
df_nan.iloc[2, 0] = float('nan')
print(df_nan)
#     name  age state  point
# 0  Alice   24    NY     64
# 1    Bob   42    CA     92
# 2    NaN   18    CA     70

print(df_nan['name'].str.contains('li'))
# 0     True
# 1    False
# 2      NaN
# Name: name, dtype: object

# print(df_nan[df_nan['name'].str.contains('li')])
# ValueError: cannot index with vector containing NA / NaN values

可以通過str.contains()的參數na來指定替換NaN結果的值。

print(df_nan['name'].str.contains('li', na=False))
# 0     True
# 1    False
# 2    False
# Name: name, dtype: bool

print(df_nan['name'].str.contains('li', na=True))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

用作條件時,如果na = True,則選擇NaN的行,如果na = False,則不選擇NaN的行。

參數case:大小寫我的處理

默認情況下,區分大小寫。如果參數case為False,則case被忽略。

print(df['name'].str.contains('LI'))
# 0    False
# 1    False
# 2    False
# Name: name, dtype: bool

print(df['name'].str.contains('LI', case=False))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool
參數regex:使用正則表達式模式

使用str.contains()時要記住的一件事是,默認情況下,指定為第一個參數的字符串將作為正則表達式模式進行處理。

print(df['name'].str.contains('i.*e'))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

如果參數ragex為False,則確定是否包含第一個參數的字符串本身。

print(df['name'].str.contains('i.*e', regex=False))
# 0    False
# 1    False
# 2    False
# Name: name, dtype: bool

例如,如果要判斷是否包含正則表達式的特殊字符,例如?,。,*,則需要設置regex = False。當然,可以指定一個正則表達式模式,以轉義\?等特殊字符。

請注意,默認值可能會導致錯誤。

df_q = df.copy()
df_q.iloc[2, 0] += '?'
print(df_q)
#        name  age state  point
# 0     Alice   24    NY     64
# 1       Bob   42    CA     92
# 2  Charlie?   18    CA     70

# print(df_q['name'].str.contains('?'))
# error: nothing to repeat at position 0

print(df_q['name'].str.contains('?', regex=False))
# 0    False
# 1    False
# 2     True
# Name: name, dtype: bool

print(df_q['name'].str.contains('\?'))
# 0    False
# 1    False
# 2     True
# Name: name, dtype: bool

str.contains()等同于re.search(),并且可以在flags參數中指定正則表達式標志。如稍后所述,還有對應于re.match()的str.match()。

請注意,下面要介紹的str.endswith()如果想要確定end ?,會更容易,如本例所示。

str.endswith():以特定字符串結尾

pandas.Series字符串方法str.endswith()可以獲取以特定字符串結尾的pandas.Series。

print(df['name'].str.endswith('e'))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

print(df[df['name'].str.endswith('e')])
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70

str.endswith()也有一個參數na。如果要選擇缺失值NaN的行,則設置na = True;如果不想選擇,則將na = False設置。

沒有參數case,因此它始終區分大小寫。

另外,第一個參數的字符串在確定中照原樣使用,而不作為正則表達式模式處理。

str.startswith():以特定的字符串開頭

pandas.Series字符串方法str.startswith()可以獲取以特定字符串開頭的pandas.Series。

print(df['name'].str.startswith('B'))
# 0    False
# 1     True
# 2    False
# Name: name, dtype: bool

print(df[df['name'].str.startswith('B')])
#   name  age state  point
# 1  Bob   42    CA     92

str.match():匹配正則表達式模式

pandas.Series字符串方法str.match()可以獲取與正則表達式模式匹配的pandas.Series。

print(df['name'].str.match('.*i.*e'))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

print(df[df['name'].str.match('.*i.*e')])
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70

如上所述,str.match()對應于re.match(),并確定字符串的開頭是否與模式匹配。如果不是一開始就為False。

print(df['name'].str.match('.*i'))
# 0     True
# 1    False
# 2     True
# Name: name, dtype: bool

print(df['name'].str.match('i.*e'))
# 0    False
# 1    False
# 2    False
# Name: name, dtype: bool

當需要確定是否包括與模式匹配的部分時,不僅在開始時,而且默認使用與上述re.search()等效的re.contains()(regex = True)。str.match()與str.contains()可以以相同的方式指定參數na,case和flag。

以上就是“Pandas如何提取含有指定字符串的行”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安丘市| 墨玉县| 诏安县| 房产| 武清区| 舒城县| 普安县| 文山县| 南江县| 安阳市| 吉林省| 武山县| 新蔡县| 普安县| 河津市| 醴陵市| 平果县| 思南县| 同仁县| 星座| 巴彦县| 莒南县| 安徽省| 余江县| 永康市| 南通市| 霍州市| 岢岚县| 阿图什市| 毕节市| 临江市| 苗栗县| 仁寿县| 霍山县| 嘉义市| 宁都县| 噶尔县| 长宁区| 西昌市| 张北县| 安仁县|