You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何直接将特定格式的地址字符串解析为pandas DataFrame?

直接解析字符串为pandas DataFrame的方案

当然有办法跳过剪贴板,直接处理你手里的字符串f!咱们可以通过文本清理和分组来生成目标DataFrame,具体步骤如下:

步骤1:导入pandas并准备字符串

首先确保你已经导入pandas,然后直接使用你的字符串变量f

import pandas as pd

# 你的原始字符串f
f = """################################################################################################### # # There are 112 matches between the tuples. The Zagat tuple is listed first, # and then its Fodors pair. # ################################################################################################### Arnie Morton's of Chicago 435 S. La Cienega Blvd. Los Angeles 90048 310-246-1501 Steakhouses Arnie Morton's of Chicago 435 S. La Cienega Blvd. Los Angeles 90048 310/246-1501 American ######################## Art's Deli 12224 Ventura Blvd. Studio City 91604 818-762-1221 Delis Art's Delicatessen 12224 Ventura Blvd. Studio City 91604 818/762-1221 American ######################## Bel-Air Hotel 701 Stone Canyon Rd. Bel Air 90077 310-472-1211 Californian Hotel Bel-Air 701 Stone Canyon Rd. Bel Air 90077 310/472-1211 Californian ######################## Cafe Bizou 14016 Ventura Blvd. Sherman Oaks 91423 818-788-3536 French Bistro Cafe Bizou 14016 Ventura Blvd. Sherman Oaks 91423 818/788-3536 French ######################## h Bistro Cafe Bizou 14016 Ventura Blvd. Sherman Oaks 91423 818/788-3536 French ########################"""

步骤2:清理字符串并提取有效行

我们需要把字符串拆分成行,然后过滤掉注释、分隔符和空行:

# 按换行符拆分字符串
lines = f.split('\n')

# 清理行:去掉空行、以#开头的行(注释和分隔符),同时去掉每行前后的空白
cleaned_lines = [line.strip() for line in lines if line.strip() and not line.strip().startswith('#')]

步骤3:将行分组为Zagat-Fodors配对

根据你的描述,每个Zagat地址后面紧跟着对应的Fodors地址,所以我们把清理后的行每两个分为一组:

# 每两个元素组成一个配对(Zagat在前,Fodors在后)
address_pairs = list(zip(cleaned_lines[::2], cleaned_lines[1::2]))

步骤4:转换为pandas DataFrame

最后直接把配对列表转换成DataFrame,指定列名即可:

matched_address = pd.DataFrame(address_pairs, columns=['addr_zagat', 'addr_fodor'])

额外提示:处理可能的异常

如果你的字符串最后出现奇数行(比如多了一个未配对的地址),可以先检查长度,避免报错:

if len(cleaned_lines) % 2 != 0:
    print("警告:发现奇数个地址行,最后一行将被忽略")
    cleaned_lines = cleaned_lines[:-1]

address_pairs = list(zip(cleaned_lines[::2], cleaned_lines[1::2]))

这样就完全不需要依赖剪贴板,直接从字符串生成你需要的DataFrame啦!

内容的提问来源于stack exchange,提问作者Sam Comber

火山引擎 最新活动