了解pandas数据帧中的数学错误 [英] understanding math errors in pandas dataframes

查看:105
本文介绍了了解pandas数据帧中的数学错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在其他列的pandas数据框中生成一个新列,并且我得到一些我不理解的数学错误。这是问题的快照和一些简化的诊断......

I'm trying to generate a new column in a pandas dataframe from other columns and am getting some math errors that I don't understand. Here is a snapshot of the problem and some simplifying diagnostics...

我可以生成一个看起来相当不错的数据框:

I can generate a data frame that looks pretty good:

import pandas
import math as m

data = {'loc':['1','2','3','4','5'],
        'lat':[61.3850,32.7990,34.9513,14.2417,33.7712],
        'lng':[-152.2683,-86.8073,-92.3809,-170.7197,-111.3877]}
frame = pandas.DataFrame(data)

frame

Out[15]:
lat lng loc
0    61.3850    -152.2683    1
1    32.7990     -86.8073    2
2    34.9513     -92.3809    3
3    14.2417    -170.7197    4
4    33.7712    -111.3877    5
5 rows × 3 columns

我可以做简单的数学运算(即度数到弧度):

I can do simple math (i.e. degrees to radians):

In [32]:
m.pi*frame.lat/180.

Out[32]:
0    1.071370
1    0.572451
2    0.610015
3    0.248565
4    0.589419
Name: lat, dtype: float64

但我无法使用python数学库将度数转换为弧度:

But I can't convert from degrees to radians using the python math library:

 In [33]:
 m.radians(frame.lat)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-99a986252f80> in <module>()
----> 1 m.radians(frame.lat)

/Users/user/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in wrapper(self)
     72             return converter(self.iloc[0])
     73         raise TypeError(
---> 74             "cannot convert the series to {0}".format(str(converter)))
     75     return wrapper
     76 

TypeError: cannot convert the series to <type 'float'>

甚至无法将值转换为浮点数以试图强制它起作用:

And can't even convert the values to floats to try to force it to work:

In [34]:

float(frame.lat)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-3311aee92f31> in <module>()
----> 1 float(frame.lat)

/Users/user/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in wrapper(self)
     72             return converter(self.iloc[0])
     73         raise TypeError(
---> 74             "cannot convert the series to {0}".format(str(converter)))
     75     return wrapper
     76 

TypeError: cannot convert the series to <type 'float'>

我确信必须有一个简单的解释,并感谢您的帮助。谢谢!

I'm sure there must be a simple explanation and would appreciate your help in finding it. Thanks!

推荐答案

数学函数,例如 math.radians 期望一个数值,例如float,而不是像 pandas.Series

math functions such as math.radians expect a numeric value such as a float, not a sequence such as a pandas.Series.

相反,您可以使用 numpy.radians ,因为 numpy.radians 可以接受数组作为输入:

Instead, you could use numpy.radians, since numpy.radians can accept an array as input:

In [95]: np.radians(frame['lat'])
Out[95]: 
0    1.071370
1    0.572451
2    0.610015
3    0.248565
4    0.589419
Name: lat, dtype: float64






只有长度为1的系列可以转换为 float 。因此,虽然这是有效的


Only Series of length 1 can be converted to a float. So while this works,

In [103]: math.radians(pd.Series([1]))
Out[103]: 0.017453292519943295

一般不会:

In [104]: math.radians(pd.Series([1,2]))
TypeError: cannot convert the series to <type 'float'>






math.radians 在其参数上调用 float 。请注意,在 pd.Series([1,2])上调用 float 时会出现相同的错误:


math.radians is calling float on its argument. Note that you get the same error calling float on pd.Series([1,2]):

In [105]: float(pd.Series([1,2]))
TypeError: cannot convert the series to <type 'float'>

这篇关于了解pandas数据帧中的数学错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆