python - 字典之类的字符串到熊猫数据框的列表
问题描述
我有一个字符串列表,示例如下。字符串看起来像一个字典,但它们不是。我想从以下列中创建一个数据框,其中包含名称、电话号码、国家/地区、电子邮件地址、最佳通话时间。
列表很大,所以我不知道有多少列名。
['{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
解决方案
我进行了常规的字符串操作(剥离{
和}
分割:
)。
然后每当我遇到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)
推荐阅读
- java - Java如何从文件中读取数据
- express - 保护直接链接不被下载。Next.js
- c - 如何使用哈希表保存用户登录/注册的数据?
- wpf - .net 框架 WPF 应用程序中 Webview2 中的 GetText 函数
- javascript - 2 个 API 在不同网络上的通信
- javascript - async 函数何时真正返回待处理的承诺?
- svelte - 更新 Svelte 组件上的 prop 更改 lá React
- elasticsearch - 如何在直线 SparkSQL 中为 ElasticSearch 创建临时表。ElasticSearch 落后于 HAProxy
- vue.js - 在没有额外包装标签的情况下渲染 v-html?
- flutter - 如何在 Flutter 中使用 Marquee 文本?