通过for循环python pandas中的多个条件提取字符串

时间:2019-07-11 12:41:11

标签: string pandas loops

我想通过循环应用其他条件来提取具有多个条件的熊猫字符串。但是,它似乎不起作用,只能返回第一列。有什么建议吗?

|col_a|col_b|
|peter--bob:5067561|peter--bob:5067561|
|chris**bbb:5067561|chris**bbb:5067561|
|bob##ccc:5067561|bob##ccc:5067561|


def get_string(df):

    cols = df.columns[0:20]

    for col in cols:

        if col.find('*') == -1: 
            return df[col].astype(str).str.split('*').str[0]

        if col.find('-') == -1:
            return df[col].astype(str).str.split('-').str[0]

        if col.find('#') == -1:
            return df[col].astype(str).str.split('#').str[0]

1 个答案:

答案 0 :(得分:2)

在循环中测试的是列名,而不是列值。解决方案是按df[col]选择列并按Series.str.contains测试,应用解决方案并分配回DataFrame

def get_string(df):

    cols = df.columns[0:20]

    for col in cols:
        for v in ['*','-','#']:
            mask = df[col].str.contains(v, na=False, regex=False)
            df.loc[mask, col] = df.loc[mask, col].str.split(v).str[0]

    return df

print (get_string(df))
   col_a  col_b
0  peter  peter
1  chris  chris
2    bob    bob