【发布时间】:2013-01-05 04:18:30
【问题描述】:
我有熊猫数据框。我想根据涉及另外两列的条件从一列中获取单个值。我正在寻找 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 中发现列的类型可能存在问题,但深度是numpy.float64 类型,Hper 是float 类型,Vper 是float 类型,所以我明白它如何适用于我的问题。
从这一点上我不知道该怎么做,因为我知道相同的代码在一种情况下有效,但在另一种情况下无效,我无法发现问题。
【问题讨论】:
-
确认
DenFrame.Hper.dtype和DenFrame.Vper.dtype是float64? -
当我使用:
print self.DenFrame.Hper.dtype时,输出为object。对于print type(self.DenFrame.Hper),输出是<class 'pandas.core.series.Series'>,里面的所有位置都是float(我有点迷失这种类型) -
DenFrame.Vper.dtype怎么样,DenFrame.Hper.map(type).unique()的输出是什么(Vper也是如此)。 -
对于
print self.DenFrame.Hper.map(type).unique(),输出为:[<type 'float'> <type 'str'>]与DenFrame.Vper完全相同 -
不幸的是,这意味着您在这些列中有一些字符串!