Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的字符串循环和数组_Python_Arrays_Regex_Pandas_Loops - Fatal编程技术网

python中的字符串循环和数组

python中的字符串循环和数组,python,arrays,regex,pandas,loops,Python,Arrays,Regex,Pandas,Loops,我有以下数据集: column1 HL111 PG3939HL11 HL339PG RC--HL--PG 我正在尝试编写一个函数,该函数执行以下操作: 循环遍历列1的每一行 只拉字母表并放入数组 如果数组中有HL,请将其从数组中删除,除非HL是数组中唯一的字。 获取数组中的第一个字并输出结果。 因此,对于上面的示例,我的数组步骤2如下所示: [HL] [PG,HL] [HL,PG] [RC,HL,PG] desired_column HL PG PG RC 我期望的最终输出步骤4如下所

我有以下数据集:

column1

HL111
PG3939HL11
HL339PG
RC--HL--PG
我正在尝试编写一个函数,该函数执行以下操作:

循环遍历列1的每一行 只拉字母表并放入数组 如果数组中有HL,请将其从数组中删除,除非HL是数组中唯一的字。 获取数组中的第一个字并输出结果。 因此,对于上面的示例,我的数组步骤2如下所示:

[HL]
[PG,HL]
[HL,PG]
[RC,HL,PG]
desired_column

HL
PG
PG
RC
我期望的最终输出步骤4如下所示:

[HL]
[PG,HL]
[HL,PG]
[RC,HL,PG]
desired_column

HL
PG
PG
RC
我有步骤2的代码,它似乎工作得很好

df['array_column'] = (df.column1.str.extractall('([A-Z]+)')
                    .unstack()
                    .values.tolist())

但是我不知道如何从这里开始到最后的输出步骤4。

这是使用apply的一种方法

演示:

输出:

level_0
0    HL
1    PG
2    PG
3    RC
dtype: object

您可以通过先替换所有非字母,然后提取字母对,然后应用一些自定义逻辑从数组中提取必要的值来实现所需的功能:

>>> df['array_column'].str.replace('[^A-Z]+', '').str.findall('([A-Z]{2})').apply(lambda d: [''] if len(d) == 0 else d).apply(lambda x: 'HL' if len(x) == 1 and x[0] == 'HL' else [m for m in x if m != 'HL'][0])
0    HL
1    PG
2    PG
3    RC
Name: array_column, dtype: object
>>> 
细节

。替换“[^A-Z]+”,删除除大写字母以外的所有字符 .str.findall'[A-Z]{2}'-提取字母对 .applylambda d:[]如果lend==0,则如果上一步中没有正则表达式匹配项,则d将添加一个空项 .applylambda x:'HL'if lenx==1和x[0]='HL'else[m for m in x if m!='HL'][0]-自定义逻辑:如果列表长度为1且等于HL,则保留它,否则删除所有HL并获取第一个元素
您可以做类似的事情,或者可能做一些更优雅的事情,您已经得到了一个相当好的结构,您可以使用groupby来完成您的解决方案

def extract_relevant_str(grp):
    ret_val = None
    if "HL" in grp[0].tolist() and len(grp) == 1:
        ret_val = "HL"
    elif len(grp) >= 1:
        ret_val = grp.loc[grp[0] != "HL", 0].iloc[0]
    return ret_val

items = df.column1.str.extractall('([A-Z]+)')
items.reset_index().groupby("level_0").apply(extract_relevant_str)
输出:

level_0
0    HL
1    PG
2    PG
3    RC
dtype: object

如果手机上没有字母,你会怎么想!!!!!或11111?如果单元格没有字母,则结果可以为空或添加null,以处理没有字母的单元格并遵循初始逻辑。