首页 > 编程问答 >用于获取半径内邮政编码的 Python 脚本无法正确填充 CSV

用于获取半径内邮政编码的 Python 脚本无法正确填充 CSV

时间:2024-07-25 11:02:26浏览次数:9  
标签:python rest zipcode

我正在尝试编写一个 Python 脚本,该脚本读取包含邮政编码的 CSV 文件,使用 API 获取半径内的邮政编码,然后将结果填充到 CSV 中的新列中。 API 请求似乎工作正常,我可以在控制台输出中看到响应。但是,生成的 CSV 文件在 radius_zips 列中没有预期的值。

这是我当前的脚本:

import pandas as pd
import requests

# Define the file paths
input_file_path = 'test_zips.csv'  # Located on the Desktop
output_file_path = 'test_zips_with_radius_zips_output.csv'  # Will be saved on the Desktop

# Define the API details
url = "https://zip-code-distance-radius.p.rapidapi.com/api/zipCodesWithinRadius"
headers = {
    "x-rapidapi-key": "your_api_key",
    "x-rapidapi-host": "zip-code-distance-radius.p.rapidapi.com"
}

# Read the CSV file
df = pd.read_csv(input_file_path)

# Function to get zip codes within a radius for a given zip code
def get_radius_zips(zip_code, radius="10"):
    querystring = {"zipCode": zip_code, "radius": radius}
    try:
        response = requests.get(url, headers=headers, params=querystring)
        response.raise_for_status()
        data = response.json()
        print(f"Response for {zip_code}: {data}")  # Print the full response
        if 'zip_codes' in data:
            zip_codes = [item['zipCode'] for item in data]
            print(f"Zip codes within radius for {zip_code}: {zip_codes}")
            return ', '.join(zip_codes)
        else:
            print(f"No zip codes found for {zip_code}")
    except requests.exceptions.RequestException as e:
        print(f"Error fetching data for zip code {zip_code}: {e}")
    except ValueError as e:
        print(f"Error parsing JSON response for zip code {zip_code}: {e}")
    return ''

# Apply the function to the total_zips column and create the radius_zips column
def process_total_zips(total_zips):
    zip_codes = total_zips.split(', ')
    radius_zip_codes = [get_radius_zips(zip.strip()) for zip in zip_codes]
    radius_zip_codes = [z for z in radius_zip_codes if z]  # Filter out empty strings
    return ', '.join(radius_zip_codes) if radius_zip_codes else ''

df['radius_zips'] = df['total_zips'].apply(process_total_zips)

# Write the modified DataFrame to a new CSV file
df.to_csv(output_file_path, index=False)

print("The new CSV file 'test_zips_with_radius_zips_output.csv' has been created.")

控制台输出表明 API 响应是正确的:

Response for 01001: [{'zipCode': '01001', 'distance': 0.0}, {'zipCode': '01106', 'distance': 2.9825640831681617}, ...]
Zip codes within radius for 01001: ['01001', '01106', ...]

但是,生成的 CSV 文件仍然有一个空的 radius_zips 列。

以下是输入 CSV 文件 (test_zips.csv) 的示例:

lat,lng,city,state_id,state_name,population,density,shortcode,total_zips
42.06262,-72.62521,Agawam,MA,Massachusetts,16045,548.6,ma_agawam,01001
42.37633,-72.46462,Amherst,MA,Massachusetts,22992,166.7,ma_amherst,01002,01003
...

以下是不正确的输出 CSV 文件 (test_zips_with_radius_zips_output.csv) 的示例:

lat,lng,city,state_id,state_name,population,density,shortcode,total_zips,radius_zips
42.06262,-72.62521,Agawam,MA,Massachusetts,16045,548.6,ma_agawam,01001,
42.37633,-72.46462,Amherst,MA,Massachusetts,22992,166.7,ma_amherst,01002,01003,
...

可能导致的原因即使 API 响应正确,输出 CSV 中的 radius_zips 列仍为空?


问题在于 process_total_zips 函数中。正在使用 zip 作为变量名,这与Python内置函数 zip() 冲突。这会导致 get_radius_zips 函数无法按预期工作,因为它无法正确迭代邮政编码列表。

以下是对代码的更正:

import pandas as pd
import requests

# ... (其他代码与之前相同)

# Function to get zip codes within a radius for a given zip code
def get_radius_zips(zip_code, radius="10"):
    # ... (代码与之前相同)

# Apply the function to the total_zips column and create the radius_zips column
def process_total_zips(total_zips):
    zip_codes = total_zips.split(', ')
    # 使用不同的变量名,例如 "zip_code" 而不是 "zip"
    radius_zip_codes = [get_radius_zips(zip_code.strip()) for zip_code in zip_codes]
    radius_zip_codes = [z for z in radius_zip_codes if z]  # Filter out empty strings
    return ', '.join(radius_zip_codes) if radius_zip_codes else ''

df['radius_zips'] = df['total_zips'].apply(process_total_zips)

# ... (其他代码与之前相同)

通过将变量名从 zip 更改为 zip_code ,就可以避免与内置函数的冲突,并且代码应该能够正确生成包含半径内邮政编码的 radius_zips 列。

标签:python,rest,zipcode
From: 78757074

相关文章

  • 如何在Python中对轮廓图应用点画?
    我想向XarrayDataArray数据添加点画以指示重要性。该数据是经纬度网格上的二维气候数据。我想提供一个True/False掩码来绘制映射的变量数据。我正在尝试使用contourf来达到此目的,但如果它们更合适,我愿意接受其他方法。我尝试过使用contourf孵化点画重要区域,但......
  • 在 Python Notebook 中调用 `subprocess` 具有与 `!` shell 不同的 `$PATH`
    我正在IPython笔记本中交互地开发一个包装类。这个包装类调用用java编写的命令行程序,因此我需要访问用于编译该程序的相同版本的java运行时。但是,我注意到在笔记本中使用方便的!运算符,生成的shell实例与在我的终端中使用zsh时不同。这得到了确......
  • 在 VSCode 中激活 conda env 时,“which python”和“sys.path”给出不同的输出
    当我激活condaenv时,选择相应的解释器并在VScode中启动Python乍一看一切似乎都很好:(My_env)name@my_computer:~/Bureau/My_env/Code/current_dir$/home/name/anaconda3/envs/My_env/bin/python-mIPython--no-autoindentPython3.12.4|packagedb......
  • Python课程设计项目期末大作业(含免费源代码)
    选题代码下载地址:https://download.csdn.net/download/s44359487yad/89572689选题程序名称:口红色号识别器选题:基于图像处理、人脸识别和Flask构建的图片口红色号识别及商品推荐系统功能:根据上传的图片自动化图像处理后分析脸部特征,并判断其嘴部妆容状态,依托现......
  • @RestController注解
    1.引言在现代的JavaWeb开发中,Spring框架因其简洁、高效和强大的功能而受到广泛欢迎。SpringMVC是Spring框架的一个重要组成部分,用于构建Web应用程序。@RestController注解是SpringMVC提供的一个关键注解,用于简化RESTfulWeb服务的开发。本文将详细讲解@RestController......
  • python webbrowser.open 不使用默认浏览器
    对你们来说这是一个好奇的家伙..在我的python程序中webbrowser.open('etc..')打开MicrosoftEdge现在奇怪的是,我在与opensChrome(我的默认值)稍有不同的文件夹中还有另一个python程序关于发生了什么的任何想法吗?!!(我知道有人问过类似的问题,但......
  • 如何在 Mac 上运行 Python 文件来读取 txt 文件并将其写入外部硬盘?
    我目前有一个充满了我想阅读的epub的文件夹,一个我已经阅读过并想再次阅读的epub的文件夹,以及一个相应的文件,其中每个文件都有epub文件的名称。问题是,这些文件夹仅位于我的外部硬盘上。我想要做的是让我的脚本解析这些文件夹中的epub列表,并在我的下载文件夹中创建最新的副......
  • 深入探索:使用Python进行网站数据加载逻辑分析与请求
    作为一名资深的Python程序员,我经常需要从网站中提取数据以供分析或进一步处理。这项任务涉及到对网站数据加载逻辑的深入分析,以及使用Python进行高效的网络请求。在本文中,我将分享如何分析网站的数据加载方式,并使用Python的requests库来模拟浏览器行为,获取所需的数据。网站......
  • 如何将 Python 列表添加到 Excel 中已有值的列的末尾?
    我目前正在尝试编写一个程序,将值附加到列表中,然后将这些值添加到Excel数据表中的列中。每次运行该程序时,我都希望在同一列的末尾添加更多值。所以我不确定如何解决这个问题,而且我在网上找到的其他答案也没有取得多大成功。以下是使用openpyxl库在Python中将......
  • 如何学习Python:糙快猛的大数据之路(学习地图)
    在这个AI和大数据主宰的时代,Python无疑是最炙手可热的编程语言之一。无论你是想转行还是提升技能,学习Python都是一个明智之选。但是,该如何开始呢?今天,让我们聊聊"糙快猛"的Python学习之道。什么是"糙快猛"学习法?"糙快猛"学习法,顾名思义,就是:糙:不追求完美,允许存......