Python 数据帧在筛选行时不明确
我需要筛选列以查找包含某些特定单词的行。我的数据集列表包括以下内容Python 数据帧在筛选行时不明确,python,pandas,Python,Pandas,我需要筛选列以查找包含某些特定单词的行。我的数据集列表包括以下内容 list_datasets=["text1.csv","text2.csv","text3.csv","text4.csv"] 数据集看起来像(行不同;标题-主、次、三级-相同): 我已尝试按如下方式筛选它们: for item in list_datasets: print(item) df = pd.read_csv("path"+item) add_
list_datasets=["text1.csv","text2.csv","text3.csv","text4.csv"]
数据集看起来像(行不同;标题-主、次、三级-相同):
我已尝试按如下方式筛选它们:
for item in list_datasets:
print(item)
df = pd.read_csv("path"+item)
add_new_column(df)
# Filter
to_search = []
while True:
q = input("Search term: ")
if q!='000':
to_search.append(q)
if q=='000':
break
df['Selected'] = df['Primary, Tertiary'].str.lower().str.contains('|'.join(to_search))
if df[(df['Selected'] == True)] :
df['Tested'] = 1
# do some stuff
我的问题在筛选行中。上面的代码给出了以下错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这对应于如果df[(df['Selected']==True)]:
一些背景:
我想做的是:
例如:在text1中,我想要搜索词:宝马、吉普和丰田;在文本2中,我想搜索菲亚特、雪佛兰、法拉利;等等但是我不知道如何在上面的代码中包含它(我对顺序有点困惑)。我想做的是在代码部分使用过滤的行来“填充”数据集
你能告诉我怎么修吗?别把它弄复杂了。遍历csv列表,绘制每个csv,并根据您定义的子字符串进行搜索 例如text1-df; 资料 输出
如果df[(df['Selected']==True)],则此
为:您可以将数据帧转换为True
或False
语句。您想做什么?我想根据我将手动添加的一些术语(使用while True条件中的输入)过滤每个数据集。我已经更新了问题以更好地解释它。这是否回答了你的问题@AMC:我尝试了以下方法:df1=df[df['Primary'].str.lower().str.contains('.|'.join(to_search))]
而不是创建新列(Selected
),并设置if
语句条件。它起作用了。但是,我不知道如何在Terziary
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df=pd.DataFrame({'Primary':['Fiat','Toyota','Mercedes','bmw', 'jeep', 'Porsche','Nissan','Volvo'],'Secondary':['Fiat','Toyota','bmw', 'jeep','Mercedes', 'Porsche','Nissan','Volvo'],'Tertairy':['Fiat','Toyota','Mercedes', 'Porsche','Nissan','bmw', 'jeep','Volvo']})
df
text1search=['bmw', 'jeep',]# Your search phrase
s="|".join(text1search)#Join the search phrase
m = df['Primary'] + df['Secondary']+ df['Tertairy']#Join all columns values
#df['check']= [y for y in ['|'.join([x for x in r])for r in df.values.tolist()]]
df[m.str.lower().str.contains(s, case=False)]#select the rows
#df = df[df.l.str.contains(s, case=False)]
df