我正在导入 pandas 并读取 csv 文件。
import pandas as pd
df = pd.read_csv(r'C:\Users\Me\MyFile.csv')
我正在将数据帧转换为字符串并将内容设为小写
df_low = df.apply(lambda x: x.astype(str).str.lower() if (x.dytpe == 'object'_ else x)
我正在使用用户输入来搜索字符串
searchterm = str(input("Enter search term: ").lower())
循环数据帧并创建掩码,然后仅返回非空结果。我目前使用
.upper
命令只是因为“项目编号”开头有 3 个大写字母,但是,当然这会使整个输出大写,但这是可行的。
for item in df_low:
mask = df_low[item].str.contains(searchterm)
df_mask = pd.DataFrame(df_low[mask])
if not df_mask.empty:
print(df_mask[['Item Number', 'User Name', 'Short Description']].to_string(index=false).upper())
如果 df 包含以下内容:
商品编号 | 用户名 | 长描述 | 简短描述 | 评论 |
---|---|---|---|---|
ITM-1 | 莱昂纳多 | 一堆包含一堆东西的单词 | 文字和东西 | 我写了字 |
ITM-2 | 多纳泰罗 | 天哪,这家伙甚至没有以正确的格式表达,但至少他写了文字。 | 人和言语 | 不适用 |
ITM-3 | 弗兰克 | Windows、SQL、RedHat、RHEL、垃圾 | 技术清单 | 技术栈 |
搜索“技术”一词预期输出:
商品编号 | 用户名 | 简短描述 |
---|---|---|
ITM-3 | 弗兰克 | 技术清单 |
由于循环,实际输出如下,因为在“简短描述”和“评论”字段中都找到了搜索词:
商品编号 | 用户名 | 简短描述 |
---|---|---|
ITM-3 | 弗兰克 | 技术清单 |
商品编号 | 用户名 | 简短描述 |
---|---|---|
ITM-3 | 弗兰克 | 技术清单 |
我尝试了
.drop_duplicates
的多种变体,但我知道我不知道如何使用它,因为我对它在整个代码中的位置了解有限。
您可以使用
applymap
来过滤具有 searchterm
的行,而不是循环:
searchterm = "Technology"
out = df[
df.applymap(lambda x: isinstance(x, str) and searchterm.lower() in x.lower()).any(
axis=1
)
]
out = out[["Item Number", "User Name", "Short Description"]]
Item Number User Name Short Description
2 ITM-3 Frank Technology list