Python 将数据帧中的元素从字符串转换为浮点数
我正在用Python Jupyter笔记本做一些数据分析 我知道以前有人问过这个问题,但我找不到解决这个问题的办法 我有一个数据框(称为数据),有3列;见上面的链接 注意:data.intermediate可以为每行包含多个航路点。data.start和data.end每行只有一对坐标 在查看行和列的数据类型时,我发现:Python 将数据帧中的元素从字符串转换为浮点数,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我正在用Python Jupyter笔记本做一些数据分析 我知道以前有人问过这个问题,但我找不到解决这个问题的办法 我有一个数据框(称为数据),有3列;见上面的链接 注意:data.intermediate可以为每行包含多个航路点。data.start和data.end每行只有一对坐标 在查看行和列的数据类型时,我发现: data.dtypes start object intermediary object end object dtype:
data.dtypes
start object
intermediary object
end object
dtype: object
当我检查单个元素时
data.iloc[0,0]
> "('24.957055', ' 114.740156')"
type(data.iloc[0,0])
> str
到目前为止一切都很好。但是,我需要使用这些坐标来提供给GoogleMapsAPI,它们需要是浮点格式
如何将3列中每列的所有这些坐标对从字符串转换为浮点?
我试过了
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
其中这些坐标对都是浮点数对
有人能指出我的错误吗?由于您没有给出中间列的格式,如果有多个航路点,我将给出单个航路点的解决方案 基本上,每个单元格值中都有一个表示为字符串的元组。因此,您需要删除“额外字符串”部分,并将其转换为浮点元组。幸运的是,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'>
导入re,ast
>>>#我的自定义函数
>>>def将_转换为_浮点(tup):
tup=re.sub(r“\”\s+,“”,tup)
tup=ast.literal\u eval(tup)
返回tup
>>>df=df.applymap(将\u转换为\u浮点)
>>>df.iloc[0,0]
(34.957055, 114.740156)
>>>类型(df.iloc[0,0])
>>>类型(df.iloc[0,0][0])
现在,您可以将此自定义函数扩展到数据中的多个航路点。为什么您的某些列中间有撇号我将数据框保存到一个笔记本中的CSV中,当我在另一个笔记本中读取CSV时,我看到了撇号不,我是在问为什么您想要的输出有撇号抱歉,打字错误。现在已修复您可以添加CSV文件的条目吗