如何直接将特定格式的地址字符串解析为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




