我想将一个函数应用于 pandas DataFrame 的列。这样的函数需要 DF 的一个字符串和一列。
如下:
def check_it(language,text):
print(language)
if language == 'EN':
result = 'DNA' in text
else:
result ='NO'
return result
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': ['DNA','sdgasdf','sdfsdf'], 'col_2':['sdfsf sdf s','DNA','sdgasdf']})
df['col_3']=df['col_2'].apply(check_it, args=('EN',))
df
这不会产生所需的结果,因为即使在函数内打印“语言”时将“EN”作为参数传递到第一个位置,结果也是列中的元素。
在 pandas 文档中:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.apply.html 这个例子并不是 100% 清楚:
def subtract_custom_value(x, custom_value):
return x - custom_value
s.apply(subtract_custom_value, args=(5,))
看起来 func 的第一个变量必须是系列。如果函数已经给出并且无法更改变量的顺序,我应该如何进行?如果函数采用多个变量并且 6 个变量中只有第三个是数据帧的系列怎么办?
以下内容可行,但不是有效的选项:
def check_it(text,language):
...
df['col_3']=df['col_2'].apply(check_SECA, args=('EN',))
因为我无法更改函数中变量的顺序。
您始终可以创建一个 lambda,并在主体中根据需要调用您的函数:
df['col_3']=df['col_2'].apply(lambda text: check_it('EN', text))
df
ID col_1 col_2 col_3
0 1 DNA sdfsf sdf s False
1 2 sdgasdf DNA True
2 3 sdfsdf sdgasdf False