如何使用函数对另一个现有列中的值进行操作来填充新的Pandas数据帧



我有一个函数isValidString,用于验证所提供字符串的格式,并根据一组标准返回true或false。

我有一个现有的数据帧,我需要向其中添加一个新列,该列应该通过对另一列的值使用isValidString来填充。我一直试图用apply方法来实现这一点,但我无法使它发挥作用。我目前正在尝试如下所示的方法(我不太了解lambdas(,我的isValidString函数抛出了一个错误,主要是抱怨期望的字符串是一个浮点值,我不知道它接收到的是什么。

df_test['is_valid'] = df_test['testresults'].apply(lambda x: isValidString(x))

这似乎应该是一个非常简单的操作,因为它一定很常见,但我还没能在SO或其他地方找到解决方案。

您只需要传递用户定义函数的名称(不带括号(就可以应用它

df_test['is_valid'] = df_test['testresults'].apply(isValidString)

问题一定是与"testresults"列中的数据有关。使用apply的方式看起来很好——无论是只传递函数还是传递包装在lambda中的函数。

import pandas as pd
import numpy as np
# return True if string is an even number after the first character
def isValidString(s):
return int(s[1:])%2 == 0
# example that the function works
assert [ isValidString(s) for s in ["v1", "v64", "v33", "v10"] ]==[False, True, False, True]
# create a test dataframe
d = pd.DataFrame( {'v':['v'+str(n) for n in np.arange(100)]} )
# both the raw function passed to apply() and lambda version work
assert (d['v'].apply(lambda s: isValidString(s))==d['v'].apply(isValidString)).all()

最新更新