首页 > 解决方案 > 字典之类的字符串到熊猫数据框的列表

问题描述

我有一个字符串列表,示例如下。字符串看起来像一个字典,但它们不是。我想从以下列中创建一个数据框,其中包含名称、电话号码、国家/地区、电子邮件地址、最佳通话时间。

列表很大,所以我不知道有多少列名。

 ['{Name: Charlie person}',
 '{Telephone Number: 454895656}',
 '{Country:}',
 '{Email Address: charlie@email.com}',
 '{Name: Karen}',
 '{Telephone Number: 1515451645}',
 '{Email Address: karen@aol.com}',
 '{Name: Sally Lastname}',
 '{Telephone Number: 151451465456}',
 '{Country: USA}',
 '{Email Address: SallyLastname@GMAIL.COM}',
 '{Best time to Call: DAYTIME}']

如果它们实际上是字典,这不会很困难,但它们不是。我尝试使用以下方法将它们转换为 dict:

from ast import literal_eval
for dct in dict_list:
    literal_eval(dct)

但这只是给我一个语法错误。有任何想法吗?谢谢你。

一个缩写的期望输出将是这个

             Name   Telephone Number        Email Address
0  Charlie Person          215465121    charlie@email.com
1           Karen       265458614566        karen@aol.com

标签: pythonpandasdictionary

解决方案


我进行了常规的字符串操作(剥离{}分割:)。

然后每当我遇到key == "Name"我打开一条新记录,然后最后pd.DataFrame.from_records用来获取DataFrame

试试这个:

import pandas as pd

dict_list = ['{name: Charlie person}',
 '{Telephone Number: 454895656}',
 '{Country:}',
 '{Email Address: charlie@email.com}',
 '{Name: Karen}',
 '{Telephone Number: 1515451645}',
 '{Email Address: karen@aol.com}',
 '{Name: Sally Lastname}',
 '{Telephone Number: 151451465456}',
 '{Country: USA}',
 '{Email Address: SallyLastname@GMAIL.COM}',
 '{Best time to Call: DAYTIME}']

records = []
for d_str in dict_list:
    key, value = map(str.strip,d_str.strip('{}').split(":", maxsplit=1))
    key = key.title()
    if key=="Name":
        records.append({})
    records[-1][key]=value

df = pd.DataFrame.from_records(records)

print(df)

推荐阅读