我们可以在熊猫中使用ILOC中的属性吗?



ques:我必须在系列中循环以找出该系列值是否包含子集字符串" hi hi?

">

说明:这里有两个DataFrames DataFrame1和DataFrame2,我正在尝试查找DataFrame2的'源代码

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]

期望:我期望包含来自dataFrame1的字符串到dataFrame3中的字符串。但是我得到以下错误。

RESULT: 
if Dataframe2['SourceCode'].iloc[j].contains(current_field):
AttributeError: 'str' object has no attribute 'contains'

伙计们作为上一个问题的补充,我现在想在dataframe3中添加一个分别的字符串(即current_field(。因此,我将知道观察结果与哪个字符串相对应。请帮助我。

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循环。因此,另一种解决方案可以是使用Series.str.contains方法和boolean indexing

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

[out]

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

,如果您需要匹配以包含文字边框,则首先创建您的正则表达式图案:

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

最新更新