python - 如何将具有多个变量的函数应用于 pandas 数据框的列(当无法更改 func 中 var 的顺序时)
问题描述
我想将 func 应用于 pandas DataFrame 的列。这样的 func 采用 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”作为参数传递,结果也是列的元素。
在此处的熊猫文档中: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 的第一个变量必须是系列。如果函数已经给出并且改变变量的顺序是不可能的,我应该如何进行?如果 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
推荐阅读
- python - 不像多线程的多线程代码?
- html - html 部分变量改变字体大小和字体背景
- java - HSQLDB 中带时区的时间戳
- tfs - TFS:工作项的日期时间字段中的比较器(2015)
- lxml - 如何使用lxml获取节点的起始位置?
- php - cron 不工作
- android - 第一个按钮按下没有被听众捕捉到
- python - Calculating loss from action and reward in Tensorflow
- apache-karaf - apache karaf 中的 ClassNotFoundException 错误
- python - 从 C 指针在 Python 中创建图像