我正在尝试将pandas中的自定义函数应用于数据帧中的一列字符串,但是它似乎是以整个系列作为参数,而不是字符串本身。使用简单的功能似乎可以正常工作,但不适用于我想使用的功能。为了说明我的问题,请考虑以下代码:

df = pd.DataFrame({'C': ['blah1, blah2']})
def addb(stra, bla):
    print(str(stra))
    return bla+stra
df[["C"]].apply(addb, bla = 'a')


不出所料,这会在第一列中的所有内容前面添加一个“ a”,但事实证明str(stra)不是该列的每个单元格中的字符串。相反,我得到一些打印出来的东西:

0    blah1, blah2
Name: C, dtype: object
0    blah1, blah2
Name: C, dtype: object


我期望并只希望打印“ blah1”和“ blah2”,因为我认为它们就是传递给stra的东西。 (对于需要字符串作为输入的函数,我需要此功能),但似乎整个系列都已传入。

最佳答案

简短的答案:您要打印出一列而不是字符串。

因为DataFrame.apply在行或列上都起作用。因此,在函数stra中定义的addb是行还是列,在两种情况下都是pd.Series

您可以尝试在代码中添加print(type(stra))

df = pd.DataFrame({'C': ['blah1, blah2']})
def addb(stra, bla):
    print(type(stra))
    # print(str(stra))
    return bla+stra
df = df[["C"]].apply(addb, bla='a')

<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>


如果只想对字符串C部分执行此操作,则需要将其指定为stra["C"]stra.C

df = pd.DataFrame({'C': ['blah1, blah2']})
def addb(stra, bla):
    print(str(stra["C"]))
    return bla+stra["C"]
df[["C"]].apply(addb, axis=1, bla='a')

blah1, blah2

0    ablah1, blah2
dtype: object

关于python - 将自定义 Pandas 函数应用于列时的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48255744/

10-08 20:31