熊猫,将元组列表的列表转换为DataFrame不便的列标题。

2024-06-06 07:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有从usaddress python库获得的解析地址的数据:https://github.com/datamade/usaddress

数据是元组列表的列表。每个地址都有一个与之相关联的列表:

[('Robie', 'BuildingName'),
('House,', 'BuildingName'),
('5757', 'AddressNumber'),
('South', 'StreetNamePreDirectional'),
('Woodlawn', 'StreetName'),
('Avenue,', 'StreetNamePostType'),
('Chicago,', 'PlaceName'),
('IL', 'StateName'),
('60637', 'ZipCode')]

但是,对于某些地址,某个字段可能存在,也可能不存在。我想将这些数据导出到一个包含所有列标题(BuildingName,Address…等等)的pandas数据框中,如果该列标题不在列表中,则单元格将留空。在

我现在拥有的是:

^{pr2}$

但这会生成一个没有列标题的文件,也没有真正的逐列组织,因为缺少的值只会转移所有内容。在

非常感谢帮助。在


Tags: 数据httpsgithubcom标题列表地址house
1条回答
网友
1楼 · 发布于 2024-06-06 07:20:20

假设如下:

  • 您使用usaddress.tag
  • 有方法处理可能从usaddress.tag引发的错误
  • 只需要从usaddress.tag返回的第一部分

然后,您可以执行以下操作

import usaddress
import pandas as pd

# your list of addresses dataframe
df = pd.read_csv('PATH_TO_ADDRESS_CSV')

# list of orderedDict
ordered_dicts = []

# loop through addresses and get respective information
for index, row in df.iterrows():
    # here you should try/except for cases that fail
    addr = usaddress.tag(row['FullAddress'])

    # append to list
    ordered_dicts.append(addr[0])

# **get all relevant keys in your list
cols = set().union(*(d.keys() for d in ordered_dicts))

# create new dataframe
df_new = pd.DataFrame(ordered_dicts, columns=cols)

df_new.to_csv('PATH_TO_DESIRED_CSV_ENDPOINT')

**表示函数这一部分的替代解决方案。因为我们完全知道.tag函数可以返回的所有列,所以您只需将这些列设置为这样(请参见所有标记here和API here):

^{pr2}$

我希望这有帮助!要知道,当您使用字典pd.DataFrame并指定精确的列时,它将自动用pd.NaN填充不存在的键。在

相关问题 更多 >