我正在尝试将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/