我有一个要求,我需要从数据框中选择行,其中一个列值类似于列表中的值。 要求是具有数百万行的大型数据框,并且需要搜索列值类似于数千个值的列表中的值的行。
以下是示例数据。
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/