我有一个数据帧,数据列的DF如下:
X Y Z DIST_1
0 309000 563250 0 681483125
1 309000 563300 0 679910525
2 309000 563350 0 678342925
尝试使用以下
在DIST_1上运行math.sqrt时DF['DIST'] = math.sqrt(DF['DIST_1'])
我正在
TypeError: cannot convert the series to <class 'float'>
我尝试在单个列和整个DataFrame上运行三个单独的函数来解决此问题:
DF['DIST_1'] = pd.to_numeric(DF['DIST_1'])
DF['DIST_1'] = (DF['DIST_1']).astype(float)
DF= DF.applymap(float)
这些中的每一个似乎都具有将DIST_1更改为浮点数的预期结果。这是运行后的输出
DF['DIST_1'] = (DF['DIST_1']).astype(float)
X Y Z DIST_1
0 309000 563250 0 681483125.0
1 309000 563300 0 679910525.0
2 309000 563350 0 678342925.0
我再次运行
DF['DIST'] = math.sqrt(DF['DIST_1'])
但结果又是
TypeError: cannot convert the series to <class 'float'>
我的代码或方法有什么错误?
答案 0 :(得分:4)
问题是math.sqrt
只能使用一个号码,而不是pandas.Series
。一种方法是使用apply
,@Kalyan推荐in the other answer。
更简单的解决方案是使用一个可以处理浮点数向量的函数numpy.sqrt
:
import numpy as np
DF['DIST'] = np.sqrt(DF['DIST_1'])
这也应该比将math.sqrt
函数重复应用于系列的每个元素要快得多。
答案 1 :(得分:2)
您可以尝试以下
DF['DIST_1'] = DF['DIST_1'].apply(math.sqrt)