从Pandas数据帧中删除字典引用

3
以下是我的数据框的输出结果:
              0                                  1  
0  {"time": "2016-03-28T23:23:12Z"      "target": "Raffi-Antilian"}  
1  {"time": "2016-03-28T23:23:12Z"      "target": "Caroline-Kaiser"}

我该如何将字典类型的单个记录转换为普通数据帧记录,其中列名是字典键,记录值是字典值? 我期望的输出应该是:
              Time                Target  
0  2016-03-28T23:23:12Z      Raffi-Antilian   
1  2016-03-28T23:23:12Z      Caroline-Kaiser

我有大约2000条记录,感激任何帮助/指导。

5
你是如何将数据导入到数据框中的?这是需要解决此问题的步骤。 - root
@root 我是通过使用pd.DataFrame.from_csv命令从一个.txt文件中获取数据的。在这个.txt文件中,每个记录都被封装在一个字典中,并且记录之间没有分隔符(例如{'time': XX, 'Target': YY}{'time': VV, 'Target': ZZ})。 - Siraj S.
请问您能否添加用于加载此数据的代码以及一些示例数据? - Dean Fenster
@SirajS.:您能否提供一段文本文件和您已有的代码的示例片段? - albert
查看导入文本的StringIO。 - Merlin
显示剩余2条评论
2个回答

3
import json
data = []
with open('filename', 'r') as f:
    for line in f:
        data.append(json.loads(line))
pd.DataFrame(data)

提供

Out[49]: 
            target                  time
0   Raffi-Antilian  2016-03-28T23:23:12Z
1  Caroline-Kaiser  2016-03-28T23:23:12Z

1
你可以使用sep=';'read_csv,即使文件中没有;,这样所有的数据都在一个Series中。然后通过ast.literal_evalstring转换为dictionary,最后使用pd.DataFrame
import pandas as pd
import ast
import io

temp=u"""{"time": "2016-03-28T23:23:12Z","target": "Raffi-Antilian"}  
{"time": "2016-03-28T23:23:12Z","target": "Caroline-Kaiser"}"""
#after testing replace io.StringIO(temp) to filename
s = pd.read_csv(io.StringIO(temp), index_col=None, header=None, sep=';', squeeze=True)
print (s)
0    {"time": "2016-03-28T23:23:12Z","target": "Raf...
1    {"time": "2016-03-28T23:23:12Z","target": "Car...
Name: 0, dtype: object

L = s.apply(lambda x: ast.literal_eval(x)).tolist()
print (L)
[{'time': '2016-03-28T23:23:12Z', 'target': 'Raffi-Antilian'}, 
 {'time': '2016-03-28T23:23:12Z', 'target': 'Caroline-Kaiser'}]

print (pd.DataFrame(L))
            target                  time
0   Raffi-Antilian  2016-03-28T23:23:12Z
1  Caroline-Kaiser  2016-03-28T23:23:12Z

另一种一行解决方案:
import pandas as pd
import json

print (pd.DataFrame([json.loads(line.strip()) for line in open('file.txt')]))

            target                  time
0   Raffi-Antilian  2016-03-28T23:23:12Z
1  Caroline-Kaiser  2016-03-28T23:23:12Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接