मैं अधिक पठनीय दिखने के लिए डेटा फ्रेम के परिणाम को प्रारूपित करना चाहता हूं। डीएफ इस तरह दिखता है:

lack_of_minutes['Period'] = pd.to_datetime(lack_of_minutes['time']) - lack_of_minutes['START_TIME']

कमी_ऑफ_मिनट डीएफ टाइप टाइमडेल्टा64 [एनएस] है।

त्रुटि से बचने के लिए TypeError: Timedelta('0 day 01:08:12') JSON serializable नहीं है मैंने इस तरह से json लौटाया:

return json.dumps(data_load, indent=4, sort_keys=True, default=str)

मूल रूप से यह सिर्फ उन सभी चीजों को परिवर्तित करता है जिन्हें वह स्ट्रिंग्स के बारे में नहीं जानता है

लेकिन जिस प्रारूप में यह समय लौटा रहा है वह इस प्रकार है: 0 days 17:25:35 मैं 0 दिनों को बाहर करना चाहता हूं और केवल समय वापस करना चाहता हूं। 17:25:35 अधिक पठनीय होने के लिए। मेरा पहला विचार डीएफ को टुकड़ा करना था लेकिन काम नहीं किया।

ऐसा करने का सही तरीका क्या है। मैं अजगर 2.x . का उपयोग कर रहा हूँ

0
Ramona Daniela 21 नवम्बर 2017, 17:59

1 उत्तर

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

मुझे संदेह है कि आपके पास जो वस्तु है वह एक pandas._libs.tslib.Timedelta है, जो JSON क्रमबद्ध (AFAIK) नहीं है। यदि आप केवल 'दिन' भाग को हटाना चाहते हैं और केवल एचएच: एमएम: एसएस है, तो आप स्ट्रिंग मैनिपुलेशन का उपयोग करके ऐसा कर सकते हैं।

import pandas as pd

# create a dummy Timedelta
d = datetime.datetime(2017,11,21,12,30) - datetime.datetime(2017,11,20,23,59)

print str(pd.to_timedelta(d))[-8:]

आउटपुट:

'12:31:00'

अपने डेटाफ़्रेम में, आप इस फ़ंक्शन को लागू करके अपने कॉलम को इस प्रारूप में एक स्ट्रिंग में बदल सकते हैं। मैं एक नया कॉलम बनाने की सलाह देता हूं (ओवरराइटिंग के बजाय) ताकि आप सुनिश्चित कर सकें कि आपका आउटपुट वही है जो आप उम्मीद करते हैं।

# new column is a string HH:MM:SS
lack_of_minutes['NewPeriod'] = lack_of_minutes['Period'].apply(lambda x: str(x)[-8:])

ध्यान रखें कि यह हमेशा आपकी स्ट्रिंग के दिनों के हिस्से को छोड़ देगा, भले ही वह 0 न हो।

0
pault 21 नवम्बर 2017, 18:28