Python 数据帧筛选器不工作,但str.match()正在工作

Python 数据帧筛选器不工作,但str.match()正在工作,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框words\u df,其中包含一些英语单词 它只有一列名为word,其中包含英文单词 words\u df.tail(): words\u df.d类型: 我想过滤掉包含单词zythum 使用熊猫系列str.match()给了我预期的输出: words\u-df[words\u-df.word.str.match('zythum')]: 我知道str.match()不是正确的方法,它还将返回包含其他单词的行,例如zythums 但是,对Pandas Dataframe使用

我有一个熊猫数据框
words\u df
,其中包含一些英语单词

它只有一列名为
word
,其中包含英文单词

words\u df.tail()

words\u df.d类型

我想过滤掉包含单词zythum

使用熊猫系列
str.match()
给了我预期的输出:

words\u-df[words\u-df.word.str.match('zythum')]

我知道
str.match()
不是正确的方法,它还将返回包含其他单词的行,例如zythums

但是,对Pandas Dataframe使用以下操作将返回一个空的Dataframe

words\u-df[words\u-df['word']='zythum']

我想知道为什么会这样

编辑1: 我还附上了我的数据源和用于导入它的代码

数据源(我使用了csv.zip中的单词列表):

数据帧导入代码:

import pandas as pd
import glob as glob
import os as os
import csv

path = r'data/words/' # use your path
all_files = glob.glob(path + "*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=None, names = ['word'], engine='python', quoting=csv.QUOTE_NONE)
    li.append(df)

words_df = pd.concat(li, axis=0, ignore_index=True)
编辑2:

这是我的一段代码,带有一个更简单的导入代码,但面临相同的问题。(使用上述链接中的Zword.csv文件)

您需要将整个列转换为
str
类型:

words_-df['word']=words_-df['word'].astype(str)

这在您的情况下应该可以使用。

IIUC:
df1[df1['word']=='zythum']
不起作用

尝试删除数据框中字符串周围的空白:

 df1[df1['word'].str.strip() == 'zythum']

导入的列表与要查找的字符串不完全匹配。csv文件中的单词后面有一个空格

您应该能够使用str.strip去掉空白。例如:

import pandas as pd
myDF = pd.read_csv('Zword.csv')
myDF[myDF['z '] == 'zythum '] # This has the whitespace
myDF['z '] = myDF['z '].map(str.strip)
myDF[myDF['z '] == 'zythum'] # mapped the whitespace away

在这里,你可以用这个来做这项工作。根据需要更改参数

import glob as glob
import os as os
import csv

def match(dataframe):
    l = []
    for i in dataframe:
        l.append('zythum' in i)
    data = pd.DataFrame(l)
    data.columns = ['word']
    return data

path = r'Word lists in csv/' # use your path
files = os.listdir(path)
li = []
for filename in files:
    df = pd.read_csv(path + filename, index_col=None, header=None, names = ['word'], engine='python', quoting=csv.QUOTE_NONE)
    li.append(df)
words_df = pd.concat(li, axis=0, ignore_index=True)

words_df[match(words_df['word'])].dropna()```

我刚刚尝试重新创建这个,但它们都产生了相同的结果,输出了那一行。我已经将源代码添加到数据中,以及用于导入数据的代码,如果这对您有帮助的话@davidbuckt导入代码中有很多东西不需要下载dictionary.csv。你能把它简化为最简单的代码,读取dictionary.csv并创建一个数据框架来演示你的问题吗?我添加了一个更简单的导入代码来演示我的问题。我仍然面临同样的问题@大卫巴克特这不是我的目标。我想用单词“zythum”筛选行。我想知道为什么
words\u-df[words\u-df['word']='zythum']
不适合我。@lazygeek啊。。。好的,看起来数据后面有空格。这是一个愚蠢的问题,我需要在这里的优秀ppl开始否决这个问题之前删除这个问题吗?