Why does df.apply(tuple) work but not df.apply(list)?

后端 未结 1 598
时光取名叫无心
时光取名叫无心 2020-11-30 14:01

Here\'s a dataframe:

    A  B  C
0   6  2 -5
1   2  5  2
2  10  3  1
3  -5  2  8
4   3  6  2

I could retrieve a column which is basically a

相关标签:
1条回答
  • 2020-11-30 14:38

    The culprit is here. With func=tuple it works, but using func=list raises an exception from within the compiled module lib.reduce:

    ValueError: ('function does not reduce', 0)
    

    As you can see, they catch the exception but don't bother to handle it.

    Even without the too-broad except clause, that's a bug in pandas. You might try to raise it on their tracker, but similar issues have been closed with some flavour of wont-fix or dupe.

    16321: weird behavior using apply() creating list based on current columns

    15628: Dataframe.apply does not always return a Series when reduce=True

    That latter issue got closed, then reopened, and converted into a docs enhancement request some months ago, and now seems to be being used as a dumping ground for any related issues.

    Presumably it's not a high priority because, as piRSquared commented (and one of the pandas maintainers commented the same), you're better off with a list comprehension:

    pd.Series([list(x) for x in df.itertuples(index=False)])
    

    Typically apply would be using a numpy ufunc or similar.

    0 讨论(0)
提交回复
热议问题