gpt4 book ai didi

python - Pandas 数据帧 `apply` 到 `dtype` 生成意外结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:23 25 4
gpt4 key购买 nike

<分区>

例子

玩具数据框:

>>> df = pd.DataFrame({'a': ['the', 'this'], 'b': [5, 2.3], 'c': [8, 11], 'd': ['the', 7]})

产量:

>>> df

a b c d
0 the 5.0 8 the
1 this 2.3 11 7

和:

>>> df.dtypes

a object
b float64
c int64
d object
dtype: object

问题陈述

但我真正想做的是执行df.apply,这样我就可以对列中的值执行一些操作,如果该列/系列是字符串类型

所以我想我可以简单地做一些事情:

>>> df.apply(lambda x: if x.dtype == 'object' and <the other check I care about>)

但它并没有像我预期的那样工作,一切都是对象。要验证,请尝试:

>>> df.apply(lambda x: x.dtype == 'object')
a True
b True
c True
d True
dtype: bool

为了了解发生了什么,我尝试了以下操作:

>>> def tmp_fn(val, typ):
... if val.dtype == typ:
... print(type(val))
... print(val.dtype)

然后

>>> df.apply(lambda x: tmp_fn(x, 'object'))
<class 'pandas.core.series.Series'>
object
<class 'pandas.core.series.Series'>
object
<class 'pandas.core.series.Series'>
object
<class 'pandas.core.series.Series'>
object
a None
b None
c None
d None
dtype: object

尝试理解

现在我知道发生了什么:pandas 系列被解释为一个系列。看起来很容易解决。

但是,事实上,它并没有像在其他情况下正常工作的系列那样工作。例如,如果我尝试:

>>> df.a.dtype
dtype('O')

>>> df.b.dtype
dtype('float64')

它们都按我的预期工作,并为我提供了系列内部的对象类型,而不是简单的事实,即它是一个系列。

但尽我所能,我无法找到一种方法来在 pandas.DataFrame.apply 中复制相同类型的行为。这里发生了什么?我怎样才能让系列像往常一样运行?换句话说,如何让 pandas.DataFrame.applypandas.Series 一样工作?直到现在我才知道/意识到他们的行为并不相同。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com