我正在嘗試通過用戶輸入查找包含字母的名稱。在這種情況下,在包含 'a' 和 'i' 的列中找到名稱,Name但出現錯誤:
data = {'Name': ['Aerial', 'Tom', 'Amie', 'Anuj'],
'Age': [27, 24, 22, 32],
'Address': ['pennsylvania', 'newyork', 'newjersey', 'delaware'],
'Qualification': ['Msc', 'MA', 'MCA', 'Phd']}
df = pd.DataFrame(data)
df["Name"] = df["Name"].str.lower()
print(df)
letters_in = input('Words in Name Column that contain these letters: \n ').split()
new_output = df.loc[df['Name'].str.contains(letters_in, case=False)]
代碼運行:
Words in Name Column that contain these letters:
>? a e
ERROR:
TypeError: unhashable type: 'list'
理想輸出(作為資料框):
Aerial
Amie
uj5u.com熱心網友回復:
首先,為了解決您的錯誤訊息,該contains()方法需要一個字串作為其第一個引數,而不是串列。
它期望的字串是它將嘗試匹配的字符序列或正則運算式(參見此處),我認為這與您嘗試的不同,即查找名稱包含所有輸入字母的行。
為此,您可以使用以下方法,例如:
import pandas as pd
data = {'Name': ['Aerial', 'Tom', 'Amie', 'Anuj'],
'Age': [27, 24, 22, 32],
'Address': ['pennsylvania', 'newyork', 'newjersey', 'delaware'],
'Qualification': ['Msc', 'MA', 'MCA', 'Phd']}
df = pd.DataFrame(data)
df["Name"] = df["Name"].str.lower()
#letters_in = input('Words in Name Column that contain these letters: \n ').split()
letters_in = ['a', 'i']
new_output = df[df.apply(lambda x: all(letter in x['Name'] for letter in letters_in), axis=1)]
print(new_output)
輸出:
Name Age Address Qualification
0 aerial 27 pennsylvania Msc
2 amie 22 newjersey MCA
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447928.html
