[英]Converting a string representation of dicts to an actual dict
我有一个CSV文件,其格式为100K +数据:
"{'foo':'bar' , 'foo1':'bar1', 'foo3':'bar3'}"
"{'foo':'bar' , 'foo1':'bar1', 'foo4':'bar4'}"
由于我的数据来自CSV文件,引号在大括号之前存在。
我想提取所有行中的键值对来创建一个像这样的数据帧:
Column Headers: foo, foo1, foo3, foo...
Rows: bar, bar1, bar3, bar...
我尝试实现类似于此处解释的内容( Python:使用Ast模块从文本文件中解析字符串时出错 )。
我已经获得了ast.literal_eval函数来处理我的文件以将内容转换为dict,但现在我如何让DataFrame函数工作? 我是一个非常初学者,所以任何帮助将不胜感激。
import pandas as pd
import ast
with open('file_name.csv') as f:
for string in f:
parsed = ast.literal_eval(string.rstrip())
print(parsed)
pd.DataFrame(???)
您可以使用pd.DataFrame.from_dict将字典转换为pandas数据帧,但它会期望字典中的每个值都在列表中。
for key, value in parsed.items():
parsed[key] = [value]
df = pd.DataFrame.from_dict(parsed)
您可以通过附加到数据框来迭代地执行此操作。
df = pd.DataFrame()
for string in f:
parsed = ast.literal_eval(string.rstrip())
for key, value in parsed.items():
parsed[key] = [value]
df.append(pd.DataFrame.from_dict(parsed))
parsed
是一个字典,你从中创建一个数据帧,然后将所有帧连接在一起:
df = []
with open('file_name.csv') as f:
for string in f:
parsed = ast.literal_eval(string.rstrip())
if type(parsed) != dict:
continue
subDF = pd.DataFrame(parsed, index=[0])
df.append(subDF)
df = pd.concat(df, ignore_index=True, sort=False)
调用pd.concat
dataframes的名单上比调用更快DataFrame.append
反复。 sort=False
意味着pd.concat
在遇到一些列名时不会对列名进行排序,比如第二行的foo4
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.