Python 如何替换数据帧列中由后面的列定义的变量子字符串?
我有一个大熊猫数据框Python 如何替换数据帧列中由后面的列定义的变量子字符串?,python,string,pandas,str-replace,Python,String,Pandas,Str Replace,我有一个大熊猫数据框df1,它在col1中包含整个用户代理,在col2中包含Chrome版本(col2是基于应用于col1的正则表达式模式生成的) 如果col2中的Chrome版本号低于此阈值,我想用高于阈值的随机整数替换col1中的Chrome版本号。请注意,如果满足阈值,则col2为None 我知道在这种情况下,我需要df.apply和axis=1,以便同时访问两个列值 然而,当我这样做时: df1.loc[(df1.col2 is not None), 'col1'] =
df1
,它在col1
中包含整个用户代理,在col2
中包含Chrome版本(col2
是基于应用于col1
的正则表达式模式生成的)
如果col2
中的Chrome版本号低于此阈值,我想用高于阈值的随机整数替换col1
中的Chrome版本号。请注意,如果满足阈值,则col2
为None
我知道在这种情况下,我需要df.apply
和axis=1
,以便同时访问两个列值
然而,当我这样做时:
df1.loc[(df1.col2 is not None), 'col1'] =
df1.apply(lambda x: x['col1'].replace(x['col2'], randint(20, 60)), axis=1)
我同意:
TypeError: ('expected a string or other character buffer object', u'occurred at index 0')
如何替换数据帧列中由后面的列定义的变量子字符串?
不适合我的解决方案(原因):(太慢)
(不适用于可变子字符串)绝对不需要
apply
。使用str。用回调替换:
from random import randint
m = df.col2.notna()
df.loc[m, 'col1'] = df.loc[m, 'col1'].str.replace(
r'(?<=Chrome/).*?(?=\s)', lambda x: str(randint(20, 60))
)
from random import randint
m = df.col2.notna()
df.loc[m, 'col1'] = df.loc[m, 'col1'].str.replace(
r'(?<=Chrome/).*?(?=\s)', lambda x: str(randint(20, 60))
)
df
col1 col2
0 Mozilla/5.0 (X11; Linux x86_64) Chrome/51 Safa... Chrome/14
1 Mozilla/5.0 (X11; Linux x86_64) Chrome/26 Safa... Chrome/15
2 Mozilla/5.0 (X11; Linux x86_64) Chrome/22 Safa... None