python - Pandas 数据框 : how to select rows where one column-value is like 'values in a list'

标签 python python-3.x pandas dataframe

我有一个要求,我需要从数据框中选择行,其中一个列值类似于列表中的值。 要求是具有数百万行的大型数据框,并且需要搜索列值类似于数千个值的列表中的值的行。

以下是示例数据。

NAME,AGE
Amar,80
Rameshwar,60
Farzand,90
Naren,60
Sheikh,45
Ramesh,55
Narendra,85
Rakesh,86
Ram,85
Kajol,80
Naresh,86
Badri,85
Ramendra,80

我的代码如下。但问题是我正在使用 for 循环,因此随着值列表中值的数量增加(如我的代码中的变量名称),我需要搜索,循环和连接操作的数量增加,这使得代码运行速度非常慢。 我不能使用 isin() 选项,因为 isin 用于精确匹配,对我来说它不是精确匹配,它对我来说是一个类似的条件。 寻找一种更好、性能更高效的方法来获得所需的结果。

我的代码:-

import pandas as pd

infile = "input.csv"

df = pd.read_csv(infile)
print(f"df=\n{df}")
names_like = ['Ram', 'Nar']
df_res = pd.DataFrame(columns=df.columns)
for name in names_like:
    df1 = df[df['NAME'].str.contains(name, na=False)]
    df_res = pd.concat([df_res,df1], axis=0)

print(f"df_res=\n{df_res}")

我的输出:-

df_res=
         NAME AGE
1   Rameshwar  60
5      Ramesh  55
8         Ram  85
12   Ramendra  80
3       Naren  60
6    Narendra  85
10     Naresh  86

寻找一种更好、性能更高效的方法来获得所需的结果。

最佳答案

您可以通过正则表达式|传递连接列表中的所有名称,不需要循环:

df_res = df[df['NAME'].str.contains('|'.join(names_like), na=False)]

关于python - Pandas 数据框 : how to select rows where one column-value is like 'values in a list' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74455909/

相关文章:

python - Pandas - 根据条件计算相关事件

python - 用 Python 解析 '\n' 到 '\n ctrl-l'

python - 如何使用 pandas 将 df 转换为 to_json 时更改日期时间格式

python - 如何删除 python pandas read_csv 中没有标题的列

python - if else 条件在 df.loc pandas 内

python - Pandas :在每组中平均填充缺失值

javascript - 使用 JSON.parse 时,我在位置 1 处收到 JSON 中的 "SyntaxError: Unexpected token '

python - 乌克兰电话号码的正则表达式模板

python - 数据框 fit_transform 抛出错误,看似不正确的错误

python - Pandas 生成缺失的日期和时间,值为 0