我如何将latlong坐标字符串分成两列?



我使用这个数据集: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)'

但是我想在纬度和经度列中得到浮点数

您可以在处理字符串后使用.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"})

这也可以:

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]

我下载了这个文件,使用下面的代码,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')

相关内容

  • 没有找到相关文章

最新更新