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