我使用这个数据集: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)'
但是我想在纬度和经度列中得到浮点数
您可以在处理字符串后使用.apply
将pd.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')