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处理数据的效率提升

Word 2010 怎么在每一章中使用不同的页眉

自动查找列表项的索引,该列表项包含在每一行的特定 pandas 列中

Pandas:在每组中平均填充缺失值比变换更快

数据分析—Pandas 中的分组聚合Groupby 高阶操作

codeigniter 分页 - 结果在每一页上保持不变