我試圖在我的資料框中的特定位置找到帶有字母的單詞。我的資料框是所有 5 個英文字母單詞的串列,全部小寫,沒有特殊字符(即只有字母字符)。
df = 5 個字母單詞的串列
單詞 = 單詞列
代碼:
firstLetter = input('First Letter = ')
secondLetter = input('Second Letter = ')
thirdLetter = input('Third Letter = ')
fourthLetter = input('Fourth Letter = ')
fifthLetter = input('Fifth Letter = ')
total = str(firstLetter) str(secondLetter) str(thirdLetter) str(fourthLetter) str(fifthLetter)
df[df['word'].str.contains(total)]['word']
這將按照輸入的順序查找包含用戶輸入字母的所有單詞。雖然有用,但它并不是我想要做的。我將如何搜索僅在特定位置包含字母的單詞并列印該串列。例如:
First letter = t
Second Letter = r
Third Letter =
Fourth Letter = i
Fifth letter = n
Out: Train
我對 python 和 jupyter 都很陌生,我想提前感謝你的幫助。
uj5u.com熱心網友回復:
對我來說最合理的似乎是使用fullmatch正則運算式:
# replace the character you inputed for unknown with "."
# Assuming space here
l1 = firstLetter.replace(' ', '.')
l2 = secondLetter.replace(' ', '.')
# same for all letters...
m = df['word'].fullmatch(f'{l1}{l2}{l3}{l4}{l5}')
df.loc[m]
理想情況下,您甚至可以直接輸入正則運算式:
regex = input('enter the pattern with "." for unknown letters: ')
# example tr.in
m = df['word'].fullmatch(regex)
df.loc[m]
uj5u.com熱心網友回復:
如果在輸入中沒有輸入值(空字串),則必須回傳 Trues,因此按位置測驗值的掩碼是:
firstLetter = input('First Letter = ')
secondLetter = input('Second Letter = ')
thirdLetter = input('Third Letter = ')
fourthLetter = input('Fourth Letter = ')
fifthLetter = input('Fifth Letter = ')
m1 = df['word'].str[0].eq(firstLetter) | (not bool(firstLetter))
m2 = df['word'].str[1].eq(secondLetter) | (not bool(secondLetter))
m3 = df['word'].str[2].eq(thirdLetter) | (not bool(thirdLetter))
m4 = df['word'].str[3].eq(fourthLetter) | (not bool(fourthLetter))
m5 = df['word'].str[4].eq(fifthLetter) | (not bool(fifthLetter))
s = df.loc[m1 & m2 & m3 & m4 & m5, 'word']
或者可以從上面創建更通用的解決方案:
firstLetter = input('First Letter = ')
secondLetter = input('Second Letter = ')
thirdLetter = input('Third Letter = ')
fourthLetter = input('Fourth Letter = ')
fifthLetter = input('Fifth Letter = ')
tup = (firstLetter, secondLetter, thirdLetter, fourthLetter, fifthLetter)
m = [df['word'].str[i].eq(v) | (not bool(v)) for i, v in enumerate(tup)]
s = df.loc[np.logical_and.reduce(m), 'word']
測驗:
print (df)
word
0 train
1 yrasn
firstLetter = input('First Letter = ')
secondLetter = input('Second Letter = ')
thirdLetter = input('Third Letter = ')
fourthLetter = input('Fourth Letter = ')
fifthLetter = input('Fifth Letter = ')
First Letter = t
Second Letter = r
Third Letter =
Fourth Letter = i
Fifth Letter = n
tup = (firstLetter, secondLetter, thirdLetter, fourthLetter, fifthLetter)
print (tup)
('t', 'r', '', 'i', 'n')
m = [df['word'].str[i].eq(v) | (not bool(v)) for i, v in enumerate(tup)]
s = df.loc[np.logical_and.reduce(m), 'word']
print (s)
0 train
Name: word, dtype: object
uj5u.com熱心網友回復:
L1=['magic','sweet','nails','squiz']
df=pd.DataFrame({'words':L1})
##Create a column for each of the letter .
df['first']=df['words'].str[0]
df['second']=df['words'].str[1]
df['third']=df['words'].str[2]
df['fourth']=df['words'].str[3]
df['fifth']=df['words'].str[4]
display(df)
words first second third fourth fifth
0 magic m a g i c
1 sweet s w e e t
2 nails n a i l s
3 squiz s q u i z
## Now you can filter this dataframe using query
# example all words with 's' in first place :
df.query('first=="s"')
## you can add multiple filters
df.query('first=="s" and second=="t"')
uj5u.com熱心網友回復:
試試這個,用串列決議資料更容易。
import re
wlist = ['crate', 'fight', 'aroma']
char = ['*','*','*','*','*']
char[0] = input('1 : ')
char[1] = input('2 : ')
char[2] = input('3 : ')
char[3] = input('4 : ')
char[4] = input('5 : ')
regex = ''.join([i if i !='' else r'\w' for i in char])
print([w for w in wlist if re.search(regex ,w)])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425827.html
標籤:Python 熊猫 jupyter-笔记本
