如何将经纬度坐标字符串分成两列?

Posted

技术标签:

【中文标题】如何将经纬度坐标字符串分成两列?【英文标题】:How do I separate lat-long coordinate strings into two columns? 【发布时间】:2021-12-11 12:36:02 【问题描述】:

我正在使用这个数据集:https://opendataportal-lasvegas.opendata.arcgis.com/datasets/restaurant-inspections-open-data/explore

在这个数据集中,有一个特征'Location_1'涉及到餐厅的位置坐标:

                     Location_1
0  (36.12976350, -115.31507320)
1  (36.10882500, -115.32125900)
2  (36.07411000, -115.08284000)
3  (36.07411000, -115.08284000)
4  (36.12734880, -115.14185020)

我想在我的 DataFrame 中创建两个新列,一列用于纬度,一列用于经度。

我天真地尝试先用命令生成列向量

lat = df['Location_1'][:,0]
long = df['Location_1'][:,1]

但它不起作用。看起来df['Location_1'] 中的条目是字符串。

例如,我尝试过

In [5]: df['Location_1'][1][1:30]
Out[5]: '36.10882500, -115.32125900)'

但我想在纬度和经度列中获得浮点数。

【问题讨论】:

当你运行df.dtypes时,位置会出现什么? 我认为它们是字符串,如果它们是浮点数,你可以这样做df['lat'], df['long'] = zip(*df['Location_1']) 【参考方案1】:

处理完字符串后,可以使用.applypd.Series映射到每一列:

In [2]: df
Out[2]:
                     Location_1
0  (36.12976350, -115.31507320)
1  (36.10882500, -115.32125900)
2  (36.07411000, -115.08284000)
3  (36.07411000, -115.08284000)
4  (36.12734880, -115.14185020)

In [3]: df = df.Location_1.str.strip("()").str.split(", ")

In [4]: df = df.apply(pd.Series).astype(float).rename(columns=0: "lat", 1: "lng")

In [5]: df
Out[5]:
         lat         lng
0  36.129764 -115.315073
1  36.108825 -115.321259
2  36.074110 -115.082840
3  36.074110 -115.082840
4  36.127349 -115.141850

或者在一行中:

df = df.Location_1.str.strip("()").str.split(", ").apply(pd.Series).astype(float)

如果需要,请添加重命名:.rename(columns=0: "lat", 1: "lng")

【讨论】:

我在实际的数据集上试过这个,但它不起作用。 我不知道您的数据是字符串。我已经更新了我的解决方案以正确处理字符串。【参考方案2】:

这也有效:

df=df['Location_1'].str.split(pat=None, n=-1, expand=True)
df[0] = df[0].str[1:]
df[0] = df[0].str[:-1]
df[1] = df[1].str[:-1]

【讨论】:

【参考方案3】:

我下载了文件并使用以下代码,result.csv 包含您所期望的两列。

import pandas as pd
df = pd.read_csv('raw_data.csv', low_memory=False)
df[['latitude', 'longitude']] = df['Location_1'].str.extract(pat = '(-?\d+\.\d+),\s*(-?\d+\.\d+)')
df.to_csv('result.csv')

【讨论】:

以上是关于如何将经纬度坐标字符串分成两列?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中,如何将某列 分成 两列。

如何将WGS84坐标转换成经纬度坐标

如何将WGS84坐标转换成经纬度坐标

如何将WGS84坐标转换成经纬度坐标(度分秒的形式)?

请问,如何将经纬度转换为XY坐标.

如何将经纬度转换成XY坐标呢?