मैंने SO की खोज की है और मुझे जो प्रश्न मिले हैं वे मेरे मामले को कवर नहीं करते हैं। मैंने https://gist.github.com/gjreda/7433f5f70299610d9b6b से कोड का अनुसरण किया है। https://docs.python.org/ से निर्देश 3/library/datetime.html#strftime-and-strptime-behavior और जुपिटर पायथन नोटबुक में लिखा है:

import numpy as np
import pandas as pd
from datetime import datetime
to_datetime = lambda d: datetime.strptime(d, '%YYYY%mm%dd-%HH%MM%SS')
pd1 = pd.read_csv(r'c:\am\shared-2\topandas.txt',sep=':',header=None, names  = ['a','b','c','d'], parse_dates=[1], converters={'a': to_datetime}, index_col = 'a')
#pd2 = pd1.to_datetime (pd1.)
pd1

मुझे त्रुटि मिली है

ValueError: समय डेटा '20160101-000000' प्रारूप से मेल नहीं खाता '%YYYY%mm%dd-%HH%MM%SS'

मैं अभिव्यक्ति में देख रहा हूं और नहीं देखता कि मैंने कहां गलती की है।

नीचे पूर्ण त्रुटि:

ValueError ट्रेसबैक (सबसे हालिया कॉल अंतिम) 1 में डेटाटाइम आयात डेटाटाइम 2 से_डेटटाइम = लैम्ब्डा डी: डेटाटाइम.स्ट्रपटाइम (डी, '% वाई वाई वाई% मिमी% डीडी-% एचएच% एमएम% एसएस') ----> 3 पीडी 1 = pd.read_csv(r'c:\am\shared-2\topandas.txt',sep=':',header=कोई नहीं, नाम = ['a','b','c','d'], parse_dates=[1], कन्वर्टर्स={'a': to_datetime}) 4 #pd2 = pd1.to_datetime (pd1.) 5 pd1

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py में parser_f(filepath_or_buffer, sep, delimiter, शीर्षलेख, नाम, index_col, usecols, निचोड़, उपसर्ग, mangle_dupe_cols, dtype, इंजन, कन्वर्टर्स, true_values, false_values, स्किपइनिशियल स्पेस, स्किपरो, स्किपफुटर, nrows, na_values, Keep_default_na, na_filter, वर्बोज़, Skip_blank_lines, parse_dates, infer_datetime_format, Keep_date_col, date_parser, डेफर्स्ट, इटरेटर, चंक्साइज़, कम्प्रेशन, हज़ारों, दशमलव, लाइनटर्मिनेटर, कोटचर, उद्धरण, डबलकोट, एस्केपचर, टिप्पणी, एन्कोडिंग, बोली, tupleize_cols, error_bad_lines, चेतावनी_बैड_लाइन्स, डेलीम_व्हाइटस्पेस, लो_मेमोरी, मेमोरी_मैप, फ्लोट_प्रेसिजन) 700 स्किप_ब्लैंक_लाइन्स =स्किप_ब्लैंक_लाइन्स) 701 -> 702 रिटर्न _read (filepath_or_buffer, kwds) 703 704 parser_f.नाम = नाम

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds) 433 434 कोशिश करें: -> 435 डेटा = parser.read(nrows) 436 अंत में: 437 parser.close ()

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py में पढ़ें (स्वयं, nrows) ११३७ डीईएफ़ पढ़ें (स्वयं, nrows=कोई नहीं): ११३८
nrows = _validate_integer ('nrows', nrows) -> ११३९ रिट = self._engine.read(nrows) ११४० ११४१ # कॉलम / col_dict बदल सकता है

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py में पढ़ें (स्वयं, nrows) 1993 डीईएफ़ पढ़ें (स्वयं, nrows = कोई नहीं): 1994
प्रयत्न: -> १९९५ डेटा = self._reader.read(nrows) १९९६ स्टॉपइटरेशन को छोड़कर: १९९७ अगर self._first_chunk:

पांडा/_libs/parsers.pyx पांडा में._libs.parsers.TextReader.read()

पांडा/_libs/parsers.pyx पांडा में._libs.parsers.TextReader._read_low_memory()

पांडा/_libs/parsers.pyx पांडा में._libs.parsers.TextReader._read_rows()

पांडा/_libs/parsers.pyx पांडा में._libs.parsers.TextReader._convert_column_data()

पांडा/_libs/parsers.pyx पांडा में._libs.parsers._apply_converter()

में (डी) 1 डेटाटाइम आयात डेटाटाइम से ----> 2 टू_डेटटाइम = लैम्ब्डा डी: डेटाटाइम.स्ट्रपटाइम (डी, '%YYY%mm%dd-%HH%MM%SS') 3 pd1 = pd.read_csv(r 'c:\am\shared-2\topandas.txt',sep=':',header=कोई नहीं, नाम = ['a','b','c','d'], parse_dates=[1] , कन्वर्टर्स = {'a': to_datetime}) 4 #pd2 = pd1.to_datetime (pd1.) 5 pd1

C:\ProgramData\Anaconda3\lib_strptime.py in _strptime_datetime(cls, data_string, format) 575 """इनपुट स्ट्रिंग और 576 प्रारूप स्ट्रिंग के आधार पर एक क्लास cls इंस्टेंस लौटाएं।" "" -> 577 tt, अंश, gmtoff_fraction = _strptime (data_string, प्रारूप) ५७८ tzname, gmtoff = tt[-2:] ५७९ args = tt[:6] + (अंश,)

C:\ProgramData\Anaconda3\lib_strptime.py in _strptime(data_string, format) 357 यदि नहीं मिला: 358 ValueError ("समय डेटा% r प्रारूप% r से मेल नहीं खाता"% -> 359 (data_string, प्रारूप)) 360 अगर लेन (डेटा_स्ट्रिंग)! = पाया। अंत (): 361 ValueError ("अपरिवर्तित डेटा रहता है:% s"%

ValueError: समय डेटा '20160101-000000' प्रारूप से मेल नहीं खाता '%YYYY%mm%dd-%HH%MM%SS'

1
Alexei Martianov 3 सितंबर 2019, 11:54

2 जवाब

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

यहां केवल एक अक्षर का उपयोग करने के लिए प्रारूप बदलना आवश्यक है, http://strftime.org/ भी देखें:

to_datetime = lambda d: datetime.strptime(d, '%Y%m%d-%H%M%S')

एक और समान समाधान:

to_datetime = lambda d: pd.to_datetime(d, format='%Y%m%d-%H%M%S')
1
Alexei Martianov 3 सितंबर 2019, 12:12

आपकी गलती यह है कि %Y एक 4-अंकीय वर्ष से मेल खाता है - इसलिए %YYYY देकर आप वास्तव में "4-अंकीय वर्ष, उसके बाद तीन Ys" का मिलान कर रहे हैं। यह दूसरों के लिए भी है।

इसके बजाय निम्न प्रारूप स्ट्रिंग आज़माएं: %Y%m%d-%H%M%S

2
Attie 3 सितंबर 2019, 11:56