यह प्रश्न शब्दकोशों की सूची से एक numpy रिकॉर्ड सरणी के निर्माण के बारे में है (जैसा कि अन्य प्रश्न में है), लेकिन विशेष रूप से डेटाटाइम प्रकार के लिए। वहाँ उल्लिखित विधि मेरे काम नहीं आई। आगे पढ़ें -

मेरे पास शब्दकोशों की एक पायथन 3 सूची है, उदाहरण के लिए:

e = [{"date":"2019-11-07","value":3.147},{"date":"2019-11-08","value":2.7315}]

मैं e को एक numpy रिकॉर्ड सरणी/संरचना में बदलना चाहता हूं, और दिनांक स्ट्रिंग को एक datetime या np.datetime64 ऑब्जेक्ट में एक झटके में डालना चाहता हूं।

लेकिन निम्नलिखित काम नहीं कर रहा है: दिनांक फ़ील्ड या तो अभी भी एक स्ट्रिंग है - किसी भी प्रकार की datetime वस्तु नहीं - या ValueError Could not convert object to NumPy datetime फेंकता है।

import numpy as np
what_goes_here = 'datetime64[s]' # or 'M8[D]', or..?
e_type = np.dtype([('date', what_goes_here), ('value', float)])
i = np.array(e, dtype=e_type)

क्या यह सब एक कदम में हासिल करने का कोई तरीका है और यदि हां तो कैसे?

कृपया कोई पायथन 2 या पांडा नहीं।

यह कुशल तरीके से विपरीत परिवर्तन है numpy रिकॉर्ड सरणी को शब्दकोश की सूची में बदलने के लिए - साथ ही अतिरिक्त datetime जटिलता

0
jtlz2 7 नवम्बर 2019, 22:02

2 जवाब

सबसे बढ़िया उत्तर

मूल्य प्राप्त करें और dtype को datetime64 और np.float में डालने से पहले टुपल्स की सूची के रूप में सहेजा गया

import numpy as np
e = [{"date": "2019-11-07", "value": 3.147},
     {"date": "2019-11-08", "value": 2.7315}]
e = [(d["date"], d["value"]) for d in e]
e = np.rec.array(e, dtype=[('date', 'datetime64[s]'), ('value', np.float)])
print('result: ', e)
print('data type of date: ', type(e.date[0]))

# print result
result:  [('2019-11-07T00:00:00', 3.147 ) ('2019-11-08T00:00:00', 2.7315)]
data type of date:  <class 'numpy.datetime64'>
1
Matt Wang 7 नवम्बर 2019, 22:29

this answer के अनुसार, डेटाटाइम ऑब्जेक्ट्स का numpy में रूपांतरण 1.11 में बदल गया।

उस लिंक से प्रश्न के एक हिस्से का उपयोग करके, यह वह देना चाहिए जो आप खोज रहे हैं (डेटाटाइम numpy प्रकार स्पष्ट रूप से निर्दिष्ट के साथ):

import numpy as np

e = [{"date":"2019-11-07","value":3.147},{"date":"2019-11-08","value":2.7315}]
e_type = np.dtype([('date', 'datetime64[us]'), ('value', np.float)])

records = np.array([(x['date'], x['value']) for x in e],
                   dtype=e_type)

# Produces
array([('2019-11-07T00:00:00.000000', 3.147 ),
       ('2019-11-08T00:00:00.000000', 2.7315)],
      dtype=[('date', '<M8[us]'), ('value', '<f8')])

>>> records[0][0]
numpy.datetime64('2019-11-07T00:00:00.000000')
0
b_c 7 नवम्बर 2019, 22:20