gpt4 book ai didi

python - 根据混合类型列的数字比较设置值 - pandas

转载 作者:行者123 更新时间:2023-12-01 03:36:01 25 4
gpt4 key购买 nike

这应该是一个非常简单的事情,但我几乎要把头撞到墙上,因为我可以弄清楚如何做到这一点。任何帮助将不胜感激。

我有一个带有混合类型列的 pandas DataFrame(它实际上是 Decimal、float 和 string,但我们假设它是 float 和 string)。我正在尝试将所有小于零的 float 的值设置为0。到目前为止我尝试过的:

In [1]: import pandas as pd
In [2]: ex = [-1, 0, 'rabbit', 'carrots', 10, 24, 'dogs']
In [3]: df = pd.DataFrame(data = ex, columns=['Test'], index = range(len(ex)))
In [4]: Mask = df.loc[:,'Test'].apply(type) != str
In [5]: df.loc[Mask,:] < 0
Out[5]: Test
0 True
1 False
4 False
5 False

好的,这样就可以了,但现在我需要将其传递到 .ix实际上将 -1 值设置为零,这就是事情变得困难的地方(这也是完全可以理解的,因为索引与原始索引的大小不同)

In [6]: df.ix[df.loc[Mask,'Test'] < 0,'Test'] = 0
Out[6]: [...] IndexingError: Unalignable boolean Series key provided

这当然是完全可以理解的,但我不知道如何解决这个问题。

我试过.index.tolist()创建第二个掩码来获取我应该执行操作的索引值,但这只是返回 df.loc[Mask,'Test'] < 0 的所有索引比较,无论它们是 True 还是 False。

任何帮助将不胜感激。

问候,

蒂姆

最佳答案

mask = df['Test'].map(lambda x: isinstance(x, (int, float)) and x < 0)
df.ix[mask, 'Test'] = 0

关于python - 根据混合类型列的数字比较设置值 - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385618/

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