将数据框中的元素从字符串转换为浮点数

时间:2018-06-21 15:21:21

标签: python pandas jupyter-notebook

Image of my data frame 我正在使用Python Jupyter Notebooks做一些数据分析。

我知道之前已经问过这个问题,但是在这种情况下我找不到可行的解决方案。

我有一个3列的数据框(CALLED DATA);参见上面的链接。

注意:data.intermediary每一行可能包含多个航点。 data.start和data.end每行只有一对坐标。

查看行和列的数据类型时,我发现:

data.dtypes

start           object
intermediary    object
end             object
dtype: object

当我检查各个元素时;

data.iloc[0,0]
> "('24.957055', ' 114.740156')"

type(data.iloc[0,0])

> str

到目前为止一切都很好。但是,我需要使用这些坐标来赋予Google Maps API,并且它们必须采用浮点格式。

如何将三列中的所有这些坐标对从字符串转换为浮点数?

我已经尝试过了

data.iloc[0,0].astype(float)
> AttributeError: 'str' object has no attribute 'astype'

x = data.iloc[1,2]
type(x)  
> str

然后:

float(x) 
> ValueError: could not convert string to float: "('24.8913208', '114.5740475')"

pd.to_numeric(data.iloc[0,0])
> ValueError: Unable to parse string "('54.957055', ' -7.740156')" at position 0

我的理想输出:

start, intermediary, end
0   24.957055,114.740156    39.956915136264,-6.753690062122  34.957055,114.740156 

这些坐标对都是浮点数对

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:-2)

由于如果存在多个航点,则没有给出中间列的格式,因此我为单个航点提供了解决方案。

基本上,每个单元格值中都有一个以字符串表示的元组。因此,您需要删除“多余的字符串”部分,并将其转换为浮点数的元组。幸运的是,pandas具有一个名为applymap的函数,您可以在其中传递自定义函数,它将应用于整个数据帧。

>>> import re, ast
>>> # My custom function
>>> def convert_to_float(tup):
        tup = re.sub(r"\'|\s+", '', tup)
        tup = ast.literal_eval(tup)
        return tup

>>> df = df.applymap(convert_to_float)
>>> df.iloc[0,0]
(34.957055, 114.740156)
>>> type(df.iloc[0,0])
<class 'tuple'>
>>> type(df.iloc[0,0][0])
<class 'float'>

现在您可以将此自定义功能扩展到数据中的多个航点。