繁体   English   中英

将dicts的字符串表示形式转换为实际的dict

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM