2016-07-11 72 views
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

+0

@root看起來像一個字典或JSON的repr,由','分割......但是......完全同意:) –

+0

@root我使用pd.DataFrame.from_csv命令通過.txt文件獲取它。在.txt文件中,單個記錄被封裝在一個字典中,並且記錄之間沒有分隔符(例如{'time':XX,'Target':YY}'''''''',V','Target':ZZ})。 –

回答

1

您可以用read_csv如果sep=';'在文件;,因此,所有的數據都在一個Series

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 
+1

一如既往的絕佳解決方案: ) 謝謝 –

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 
然後通過 ast.literal_eval和最後使用 pd.DataFrame轉換 stringdictionary