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开始否决这个问题之前删除这个问题吗?