python - 通过检查标题将字典转换为 CSV
问题描述
我有一个很长的dict
,它是由元组列表的边距创建的。这dict
包含列表中的值 - 所以它有一个顺序,比如
value:key1, value:key2, value:key3, value:key1, value:key2, value:key3
但这不是规则!例如,有些地方没有 a,有些key2
地方是key4
。这values
有不同的键。
所以看起来很像这样
value:key1, value:key2, value:key1, value:key2, value:key4
我想从这些数据中创建一个 csv 文件。我想查看dict
,查看键,将这些键添加到 csv 标头,如果它不包含该键并为该键添加值,none
如果没有值。
所以我有这个
{'www.example1.com': 'url', 'FAILURE TO APPEAR (FOR FELONY OFFENSE) - FELONY': 'Charge', 'SIMULTANEOUS POSSESSION OF DRUGS AND FIREARMS - FELONY': 'Offense Date', 'POSSESSION WITH INTENT TO DELIVER METHAMPHETAMINE OR COCAINE': 'Court Type', 'Count=3': 'Court Date', '10-30-2019': 'Bond', '11-16-2019': 'Charging Agency', '': 'DEGREE', '181680713': 'ID', '24': 'Age', 'H': 'Race', 'M': 'Sex', 'BRO': 'Eye Color', 'BLK': 'Hair Color', '175 lb (79 kg)': 'Weight', '5′ 10″ (1.78 m)': 'Height', 'address example': 'Address', '11/16/2019 at 22:07': 'Admit Date', 'Benton Co': 'Confining Agency',
'www.example2.com': 'url', '32-5a-191.4': 'STATUTE', '000-0000 (ALABAMA STATE TROOPERS)': 'COURT CASE NUMBER', 'IGNITION INTERLOCK VIOLATION': 'Description', 'V': 'LEVEL', '$1000.00': 'Bond Set Amount', '181727213': 'ID', 'name example': 'Name', 'W': 'Race', 'MALE': 'Gender', 'Released': 'Inmate Status', 'some number': 'Booking No', 'some number': 'Inmate Number', '11/18/2019 at 16:49': 'Booking Date', '11/18/2019 at 20:35': 'Release Date', '33': 'Arrest Age', 'some address': 'Address Given'}
我想要一个这样的csv
文件
url | Charge | Statute
1 www.example1.com SIMULTANEOUS none
2 www.example2.com none 32-5a-191.4
标题中的顺序并不重要。
我试过这段代码,但它覆盖了第一行的数据,没有附加......
res = defaultdict(list)
d = dict((y, x) for x, y in my_dict)
for key, val in sorted(d.items()):
res[val].append(key)
df = pd.DataFrame.from_dict(res, orient='index').fillna(np.nan).T
df.to_csv("file.csv")
解决方案
在您的示例中,我看到每个新行都以 url 开头。
我认为这段代码可以做到。
from collections import defaultdict
import pandas as pd
my_dict = {
'www.example1.com': 'url',
'FAILURE TO APPEAR (FOR FELONY OFFENSE) - FELONY': 'Charge',
'SIMULTANEOUS POSSESSION OF DRUGS AND FIREARMS - FELONY': 'Offense Date',
'POSSESSION WITH INTENT TO DELIVER METHAMPHETAMINE OR COCAINE': 'Court Type',
'Count=3': 'Court Date',
'10-30-2019': 'Bond',
'11-16-2019': 'Charging Agency',
'': 'DEGREE',
'181680713': 'ID',
'24': 'Age',
'H': 'Race',
'M': 'Sex',
'BRO': 'Eye Color',
'BLK': 'Hair Color',
'175 lb (79 kg)': 'Weight',
'5′ 10″ (1.78 m)': 'Height',
'address example': 'Address',
'11/16/2019 at 22:07': 'Admit Date',
'Benton Co': 'Confining Agency',
'www.example2.com': 'url',
'32-5a-191.4': 'STATUTE',
'000-0000 (ALABAMA STATE TROOPERS)': 'COURT CASE NUMBER',
'IGNITION INTERLOCK VIOLATION': 'Description',
'V': 'LEVEL',
'$1000.00': 'Bond Set Amount',
'181727213': 'ID',
'name example': 'Name',
'W': 'Race',
'MALE': 'Gender',
'Released': 'Inmate Status',
'some number': 'Booking No',
'some number': 'Inmate Number',
'11/18/2019 at 16:49': 'Booking Date',
'11/18/2019 at 20:35': 'Release Date',
'33': 'Arrest Age',
'some address': 'Address Given'
}
items = []
curr_dict = None
for key in my_dict.keys():
new_key = my_dict[key]
new_value = key if key else 'None'
if new_key == 'url':
curr_dict = {}
items.append(curr_dict)
curr_dict[new_key] = new_value
df = pd.DataFrame(items).fillna('None')
df.to_csv("file.csv", index = False)
推荐阅读
- javascript - 我需要将经纬度位置向上/向下舍入到大约 0-1 公里到相互 GPS 协调点/点
- r - 如何在百分比图中添加误差线?
- mysql - 在连接中使用带有参数的递归 cte
- google-cloud-platform - 如何从我的google云平台项目中获取公网ip
- c# - 图像处理应该驻留在 DDD 应用程序的什么位置?
- jupyter-notebook - Google Colab 文档字符串工具提示无效
- c# - Visual Studio for Mac 在升级到 VS Mac 8.10 时找不到 .Net 6.0 或 .Net 5.0
- spring - 错误:运算符不存在:uuid = bigint
- google-chrome - 如何找出 Chrome 的原因:Aw, Snap
- matlab - 如何在MATLAB中将RGB矩阵转换为二进制数组