Pandas - 使用 PostCoder 在每一行中查找纬度和经度,然后在新列中返回 Postcode
Posted
技术标签:
【中文标题】Pandas - 使用 PostCoder 在每一行中查找纬度和经度,然后在新列中返回 Postcode【英文标题】:Pandas - using PostCoder to lookup Latitude & Longitude in each row, then return Postcode in new columns 【发布时间】:2019-04-01 02:22:07 【问题描述】:我想从 pandas 的数据框 df1 中读取两列(纬度和经度),并创建一个新列 zipcode 并在数据框中的每一行添加邮政编码。
我觉得这个网页很有用:https://postcodes.readthedocs.io/en/latest/
df1 = df[['Col1',' Col2', 'Col3','Col4', 'Col5', 'Latitude', 'Longitude']]
for row in df1[7]:
# Try to,
try:
# get lat long and find the post code
postcodes.get_nearest(lat, lng)
# But if you get an error
except:
# error
# Create a new columns post code in df1
df1['postcode'] = zipcode
【问题讨论】:
【参考方案1】:您必须使用apply
根据数据框的其他数据创建新列。
def getPostcode(row):
try:
row['postcode']=postcodes.get_nearest(row['Latitude'], row['Longitude'])
except:
print('Error for data 0'.format(row))
return row
然后在initdf1
之后将这一行添加到主代码中:
df1.apply(getPostcode,axis=1)
.
【讨论】:
【参考方案2】:你可以试试:
df1['postcode'] = df1.apply(
lambda x: postcodes.get_nearest(x['Latitude'], x['Longitude']),
axis=1
)
您可以想象,apply 函数循环执行函数(在本例中为 lambda 函数)的数据帧的每一行或每一列。 当轴选项为 1 时,它将循环行,当轴选项为 0(默认)时,它将循环列。 此 lambda 函数接收一行作为 x,然后将“纬度”和“经度”值发送到 .get_nearest。
根据数据框的大小,可能需要一段时间。 我已经在这里测试了邮政编码,但它没有工作,但如果这个库对你有用,这个代码应该没问题。
【讨论】:
你不能在 lambda 块中使用内联 try-except。 我不打算使用 try-except。但是如果是这样的话,它可以定义一个函数而不是使用lambda。 谢谢@edinho。 .get_nearest 也不适合我。除了使用 PostCodes 库之外还有其他方法吗? 我不知道。但我会从查看开放街道地图项目和 google apis 开始。以上是关于Pandas - 使用 PostCoder 在每一行中查找纬度和经度,然后在新列中返回 Postcode的主要内容,如果未能解决你的问题,请参考以下文章
手撸 Pandas - 02:Pandas处理数据的效率提升
自动查找列表项的索引,该列表项包含在每一行的特定 pandas 列中