我们可以在Pandas的iloc中使用contains属性吗?

2024-09-30 07:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:我必须在一组序列中循环,以确定序列值中是否有任何一个包含子集字符串“Hi”?你知道吗

说明:这里有两个Dataframes Dataframe1和Dataframe2,我试图找出Dataframe2的“源代码”是否包含Dataframe1的字符串,并在Dataframe3中设置结果。你知道吗

import pandas as pd
import numpy as np
import openpyxl

data = {'Fields' : ['Hi', 'How', 'Are', 'You']}

Dataframe1 = pd.DataFrame(data)

data2 = {'SourceCode' : ['LMNOHiPQR', 'LMNOHowPQR'']}

Dataframe2 = pd.DataFrame(data2)

data3 = {'dummy' : []}

Dataframe3 = pd.DataFrame(data3)

for i in range(0,len(Dataframe1)):      
    current_string=Dataframe1['Fields'][i]
    for j in range(0,len(Dataframe2)): 
            if Dataframe2['SourceCode'].iloc[j].contains(current_field):
                Dataframe3['dummy'].iloc[j] =Dataframe2['SourceCode'].iloc[j]

期望:我期望在Dataframe3中设置包含Dataframe1中的字符串的“SourceCode”值。但我得到下面的错误。你知道吗

RESULT: 
if Dataframe2['SourceCode'].iloc[j].contains(current_field):

AttributeError: 'str' object has no attribute 'contains'

Tags: 字符串importdataframedataas序列currenthi
1条回答
网友
1楼 · 发布于 2024-09-30 07:34:30

IIUC您应该使用in操作符来测试字符串中是否存在子字符串,因此您的循环应该类似于:

for i in range(0,len(Dataframe1)):      
    current_string=Dataframe1['Fields'][i]
    for j in range(0,len(Dataframe2)): 
        if current_string in Dataframe2['SourceCode'].iloc[j]:
                Dataframe3.loc[j, 'dummy'] = Dataframe2['SourceCode'].iloc[j]

但是,不建议使用pandas.DataFrames循环。因此,另一种解决方案是使用^{}方法和^{}

Dataframe3 = Dataframe2[Dataframe2.SourceCode.str.contains('|'.join(Dataframe1.Fields))]

[输出]

                                   SourceCode
0   try{string s = "Hi"}catch { }return null;
1  try{string s = "How"}catch { }return null;

如果您需要匹配项包含单词边界,请首先创建regex模式,如:

pat = r'\b' + r'\b|\b'.join(Dataframe1.Fields) + r'\b'
Dataframe3 = Dataframe2[Dataframe2.SourceCode.str.contains(pat)]

相关问题 更多 >

    热门问题