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
这些坐标对都是浮点数对
有人可以指出我的错误吗?
答案 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'>
现在您可以将此自定义功能扩展到数据中的多个航点。