gpt4 book ai didi

python - Pandas 数据帧操作中不受支持的操作数

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

我有 Pandas 数据框。我想根据涉及另外两个列的条件从列中获取单个值。我正在寻找 column3 中 column1 和 2 中最大距离的值。

我构建了一个有效的简单示例:

d = pd.DataFrame({'c1':[.1,3,11.3],'c2':[3,6,.6],'c3':[8,.8,10.9]})
print'data d=\n%s\n' % d
x = float(d.c3[abs(d.c1-d.c2)==max(abs(d.c1-d.c2))].values)
print 'the value of x= \n%s\n' % x

这个例子的输出如我所料:

     c1   c2    c3
0 0.1 3.0 8.0
1 3.0 6.0 0.8
2 11.3 0.6 10.9

the value of x=
10.9

我尝试将完全相同的逻辑应用于类中大型数据框的原始问题。代码是:

yInit = float(self.DenFrame.Depth[abs(self.DenFrame.Hper-self.DenFrame.Vper)==max(abs(self.DenFrame.Hper-self.DenFrame.Vper))].values)

但是这段代码会产生错误:

...
File "C:\Python27\lib\site-packages\pandas-0.9.0-py2.7-win32.egg\pandas\core\series.py", line 73, in wrapper
return Series(na_op(self.values, other.values),
File "C:\Python27\lib\site-packages\pandas-0.9.0-py2.7-win32.egg\pandas\core\series.py", line 59, in na_op
result[mask] = op(x[mask], y[mask])
TypeError: unsupported operand type(s) for -: 'str' and 'str'

我在 here 中找到列的类型可能有问题,但 Depth 的类型是 numpy.float64 Hper 的类型是 float Vper 的类型是 float 所以我明白了它如何适用于我的问题。

此时我不知道该怎么做,因为我知道相同的代码在一种情况下有效但在另一种情况下无效,而且我无法发现问题。

最佳答案

DenFrame.HperDenFrame.Vper 中有一些字符串。

您可以通过检查每个元素的 dtype 或类型来查看:

In [11]: df.Hper.dtype
Out[11]: dtype('object')

意味着numpy数组可以包含各种类型,我们可以看到这些类型是什么:

In [12]: DenFrame.Hper.map(type).unique()
Out[12]: [<type 'float'> <type 'str'>]

您可以检查哪些条目是字符串:

DenFrame[DenFrame.Hper.map(type) == str]

也许只包括 float 的那些是有意义的:

DenFrame_floats = DenFrame[(DenFrame.Hper.map(type) == float) & 
(DenFrame.Vper.map(type) == float)]

或者您可以(如果可能的话)将它们转换为 float :

DenFrame.Hper = DenFrame.Hper.apply(float)

关于python - Pandas 数据帧操作中不受支持的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450020/

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