Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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_String_Pandas_Str Replace - Fatal编程技术网

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