python मैं Pandas DataFrame में एम्बेडेड जेसन ऑब्जेक्ट का उपयोग कैसे करूं?



json mongodb (1)

टीएल; डॉ यदि पांडस डेटाफ़्रेम में फ़ील्ड भरे हुए हैं, तो जेएसओएन दस्तावेजों को खुद में शामिल किया जाता है, उन्हें फैशन की तरह पांडा में कैसे काम किया जा सकता है?

वर्तमान में मैं सीधे एक ट्विटर लाइब्रेरी ( twython ) से एक मोंगो संग्रह में जेसन / डिक्शनिंग परिणाम निकाल रहा हूं (जिसे उपयोगकर्ताओं को यहां बताया गया है)

from twython import Twython
from pymongo import MongoClient

tw = Twython(...<auth>...)

# Using mongo as object storage 
client = MongoClient()
db = client.twitter
user_coll = db.users

user_batch = ... # collection of user ids
user_dict_batch = tw.lookup_user(user_id=user_batch)

for user_dict in user_dict_batch:
    if(user_coll.find_one({"id":user_dict['id']}) == None):
        user_coll.insert(user_dict)

इस डेटाबेस को लोकप्रिय बनाने के बाद मैं पांड्या में दस्तावेजों को पढ़ता हूं:

# Pull straight from mongo to pandas
cursor = user_coll.find()
df = pandas.DataFrame(list(cursor))

जादू की तरह काम करता है:

मैं 'स्थिति' फील्ड पांडा शैली (सीधे ऐक्सेसों को एक्सेस करने) को उलझाना करने में सक्षम होना चाहता हूं। क्या उधर रास्ता है?

संपादित करें: डीएफ ['स्थिति: टेक्स्ट'] की तरह कुछ स्थिति में 'टेक्स्ट', 'बनाया_ट' जैसी फ़ील्ड हैं एक विकल्प इस जेसन फ़ील्ड को इस पुल अनुरोध की तरह सपाट / सामान्य कर सकता है, वेस मैककिने पर काम कर रहा था।


Answer #1

एक समाधान सिर्फ श्रृंखला निर्माता के साथ इसे तोड़ना है:

In [1]: df = pd.DataFrame([[1, {'a': 2}], [2, {'a': 1, 'b': 3}]])

In [2]: df
Out[2]: 
   0                   1
0  1           {u'a': 2}
1  2  {u'a': 1, u'b': 3}

In [3]: df[1].apply(pd.Series)
Out[3]: 
   a   b
0  2 NaN
1  1   3

कुछ मामलों में आप इसे डिक्ट्रेफ के स्थान पर डेटाफ्रेम में शामिल करना चाहते हैं:

In [4]: dict_col = df.pop(1)  # here 1 is the column name

In [5]: pd.concat([df, dict_col.apply(pd.Series)], axis=1)
Out[5]: 
   0  a   b
0  1  2 NaN
1  2  1   3

यदि यह गहरा हो जाता है, तो आप ऐसा कुछ समय कर सकते हैं ...





pandas