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