将自定义pandas函数应用于列时的奇怪行为

时间:2018-01-15 01:01:52

标签: python pandas

我正在尝试将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的东西。 (我需要这个函数需要一个字符串作为输入)但似乎整个系列都被传入。

1 个答案:

答案 0 :(得分:1)

简答:您正在打印一列而不是字符串。

因为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