df['statistics'].head().to_dict() से निर्मित निम्नलिखित शब्दकोश को देखते हुए

{0: {'executions': {'total': '1',
   'passed': '1',
   'failed': '0',
   'skipped': '0'},
  'defects': {'product_bug': {'total': 0, 'PB001': 0},
   'automation_bug': {'AB001': 0, 'total': 0},
   'system_issue': {'total': 0, 'SI001': 0},
   'to_investigate': {'total': 0, 'TI001': 0},
   'no_defect': {'ND001': 0, 'total': 0}}},
 1: {'executions': {'total': '1',
   'passed': '1',
   'failed': '0',
   'skipped': '0'},
  'defects': {'product_bug': {'total': 0, 'PB001': 0},
   'automation_bug': {'AB001': 0, 'total': 0},
   'system_issue': {'total': 0, 'SI001': 0},
   'to_investigate': {'total': 0, 'TI001': 0},
   'no_defect': {'ND001': 0, 'total': 0}}},
 2: {'executions': {'total': '1',
   'passed': '1',
   'failed': '0',
   'skipped': '0'},
  'defects': {'product_bug': {'total': 0, 'PB001': 0},
   'automation_bug': {'AB001': 0, 'total': 0},
   'system_issue': {'total': 0, 'SI001': 0},
   'to_investigate': {'total': 0, 'TI001': 0},
   'no_defect': {'ND001': 0, 'total': 0}}},
 3: {'executions': {'total': '1',
   'passed': '1',
   'failed': '0',
   'skipped': '0'},
  'defects': {'product_bug': {'total': 0, 'PB001': 0},
   'automation_bug': {'AB001': 0, 'total': 0},
   'system_issue': {'total': 0, 'SI001': 0},
   'to_investigate': {'total': 0, 'TI001': 0},
   'no_defect': {'ND001': 0, 'total': 0}}},
 4: {'executions': {'total': '1',
   'passed': '1',
   'failed': '0',
   'skipped': '0'},
  'defects': {'product_bug': {'total': 0, 'PB001': 0},
   'automation_bug': {'AB001': 0, 'total': 0},
   'system_issue': {'total': 0, 'SI001': 0},
   'to_investigate': {'total': 0, 'TI001': 0},
   'no_defect': {'ND001': 0, 'total': 0}}}}

क्या डिक्शनरी की/वैल्यू पेयर को अपने कॉलम में विस्तारित करने और मूल कॉलम के नाम के साथ इन कॉलम्स को प्रीफ़िक्स करने का कोई तरीका है, यानी statisistics.executions.total stats_executions_total या यहां तक ​​कि executes_total बन जाएगा?

मैंने प्रदर्शित किया है कि मैं निम्नलिखित का उपयोग करके कॉलम बना सकता हूं:

pd.concat([df.drop(['statistics'], axis=1), df['statistics'].apply(pd.Series)], axis=1) हालाँकि, आप देखेंगे कि इन नव निर्मित स्तंभों में से प्रत्येक का एक डुप्लिकेट नाम "कुल" है।

मैं; हालांकि, मूल कॉलम नाम के साथ नए बनाए गए कॉलम को उपसर्ग करने का कोई तरीका नहीं ढूंढ पाए हैं, यानी निष्पादन_टोटल।

अतिरिक्त अंतर्दृष्टि के लिए, आंकड़े निष्पादन और दोषों में विस्तारित होंगे और निष्पादन पास में विस्तारित होंगे | असफल | छोड़ दिया | कुल और दोष का विस्तार ऑटोमेशन_बग में होगा | system_issue | to_investigate | उत्पाद_बग | नहीं_दोष। बाद में कुल में विस्तार होगा | **001 कॉलम जहां टोटल कई बार दोहराया जाता है।

किसी भी विचार का बहुत आभार माना जाएगा। -धन्यवाद!

0
Eric 19 सितंबर 2020, 19:34

1 उत्तर

सबसे बढ़िया उत्तर
  • OP में dict से 'statistics' कॉलम के साथ DataFrame बनाएं। <उल>
  • यह शब्दकोशों के एक स्तंभ के साथ एक डेटाफ़्रेम बनाएगा।
  • पर pandas.json_normalize का उपयोग करें 'statistics' कॉलम। <उल>
  • डिफ़ॉल्ट sep . है। <उल>
  • नेस्टेड रिकॉर्ड sep से अलग किए गए नाम जेनरेट करेंगे।
  • import pandas as pd
    
    # this is for setting up the test dataframe from the data in the question, where data is the name of the dict
    df = pd.DataFrame({'statistics': [v for v in data.values()]})
    
    # display(df)
                                                                                                                                                                                                                                                                                                        statistics
    0  {'executions': {'total': '1', 'passed': '1', 'failed': '0', 'skipped': '0'}, 'defects': {'product_bug': {'total': 0, 'PB001': 0}, 'automation_bug': {'AB001': 0, 'total': 0}, 'system_issue': {'total': 0, 'SI001': 0}, 'to_investigate': {'total': 0, 'TI001': 0}, 'no_defect': {'ND001': 0, 'total': 0}}}
    1  {'executions': {'total': '1', 'passed': '1', 'failed': '0', 'skipped': '0'}, 'defects': {'product_bug': {'total': 0, 'PB001': 0}, 'automation_bug': {'AB001': 0, 'total': 0}, 'system_issue': {'total': 0, 'SI001': 0}, 'to_investigate': {'total': 0, 'TI001': 0}, 'no_defect': {'ND001': 0, 'total': 0}}}
    2  {'executions': {'total': '1', 'passed': '1', 'failed': '0', 'skipped': '0'}, 'defects': {'product_bug': {'total': 0, 'PB001': 0}, 'automation_bug': {'AB001': 0, 'total': 0}, 'system_issue': {'total': 0, 'SI001': 0}, 'to_investigate': {'total': 0, 'TI001': 0}, 'no_defect': {'ND001': 0, 'total': 0}}}
    3  {'executions': {'total': '1', 'passed': '1', 'failed': '0', 'skipped': '0'}, 'defects': {'product_bug': {'total': 0, 'PB001': 0}, 'automation_bug': {'AB001': 0, 'total': 0}, 'system_issue': {'total': 0, 'SI001': 0}, 'to_investigate': {'total': 0, 'TI001': 0}, 'no_defect': {'ND001': 0, 'total': 0}}}
    4  {'executions': {'total': '1', 'passed': '1', 'failed': '0', 'skipped': '0'}, 'defects': {'product_bug': {'total': 0, 'PB001': 0}, 'automation_bug': {'AB001': 0, 'total': 0}, 'system_issue': {'total': 0, 'SI001': 0}, 'to_investigate': {'total': 0, 'TI001': 0}, 'no_defect': {'ND001': 0, 'total': 0}}}
    
    # normalize the statistics column
    dfs = pd.json_normalize(df.statistics)
    
    # display(dfs)
      total passed failed skipped  product_bug.total  product_bug.PB001  automation_bug.AB001  automation_bug.total  system_issue.total  system_issue.SI001  to_investigate.total  to_investigate.TI001  no_defect.ND001  no_defect.total
    0     1      1      0       0                  0                  0                     0                     0                   0                   0                     0                     0                0                0
    1     1      1      0       0                  0                  0                     0                     0                   0                   0                     0                     0                0                0
    2     1      1      0       0                  0                  0                     0                     0                   0                   0                     0                     0                0                0
    3     1      1      0       0                  0                  0                     0                     0                   0                   0                     0                     0                0                0
    4     1      1      0       0                  0                  0                     0                     0                   0                   0                     0                     0                0                0
    
    1
    Trenton McKinney 21 सितंबर 2020, 01:42