जब मैं उन्हें डेटाटाइमइंडेक्स के रूप में असाइन करता हूं तो मेरी टाइमरीज़ तिथियां (दिन/माह) गड़बड़ हो रही हैं। अजीब लगता है कि पार्सर इसे इतना गलत कर सकता है, लेकिन प्रारूप घोषित करने और डेफर्स्ट का उपयोग करने का प्रयास किया है लेकिन कुछ भी काम नहीं कर रहा है।

#input_data = pd.read_csv(url)
input_data = pd.read_csv(url,usecols=['Dates','TYAFWD Comdty'],skiprows=None, parse_dates=True, nrows=1500)

# Set Date as Index, clean dataframe
input_data = input_data.set_index('Dates')
df = pd.DataFrame(input_data).dropna()
print(df.columns)

# Create new Date index
data_time = pd.to_datetime(df.index)
datetime_index = pd.DatetimeIndex(data_time.values) 
df = df.set_index(datetime_index)
df.index = pd.to_datetime(df.index, infer_datetime_format='%Y/%m/%d' )


df['year'] = pd.DatetimeIndex(df.index).year
df['month'] = pd.DatetimeIndex(df.index).month
df['week'] = pd.DatetimeIndex(df.index).weekofyear
print(df.head(30))

आउटपुट से देख सकते हैं कि यह सब मिला हुआ है। मुझे उम्मीद है कि आउटपुट में सभी प्रविष्टियां मई, 5 वें महीने में होंगी, लेकिन यह एक बार <12 तारीखों को फ़्लिप कर रहा है

यहाँ मेरा कच्चा डेटा है: https://raw.githubusercontent.com/esheehan1/projects/master/BB_FUT_DATA। सीएसवी

Index(['TYAFWD Comdty'], dtype='object')
            TYAFWD Comdty  year  month  week
2020-05-26          0.508  2020      5    22
2020-05-25          0.494  2020      5    22
2020-05-22          0.494  2020      5    21
2020-05-21          0.508  2020      5    21
2020-05-20          0.512  2020      5    21
2020-05-19          0.512  2020      5    21
2020-05-18          0.552  2020      5    21
2020-05-15          0.483  2020      5    20
2020-05-14          0.474  2020      5    20
2020-05-13          0.494  2020      5    20
2020-12-05          0.510  2020     12    49
2020-11-05          0.548  2020     11    45
2020-08-05          0.527  2020      8    32
2020-07-05          0.494  2020      7    27
2020-06-05          0.568  2020      6    23
2020-05-05          0.541  2020      5    19
0
ES Kepler 16 जून 2020, 20:03

3 जवाब

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

कोड लिखने से पहले (यदि आप कर सकते हैं) लिखने से पहले अपने कच्चे डेटा को देखना हमेशा एक अच्छा विचार है।

आपके विशेष मामले में दिनांक प्रारूप डी/एम/वाई है जो अंतर्राष्ट्रीय और यूरोपीय मानक है। फ़ंक्शन pd.read_csv डिफ़ॉल्ट रूप से अमेरिकी दिनांक प्रारूप M/D/Y का उपयोग करता है।

पैरामीटर dayfirst=True का उपयोग करके इसे बदलने से आपका वांछित आउटपुट मिलेगा। साथ ही, मैंने आपका कोड थोड़ा छोटा कर दिया है:

import pandas as pd
from datetime import date
url = 'https://raw.githubusercontent.com/esheehan1/projects/master/BB_FUT_DATA.csv'
df = pd.read_csv(url, usecols=['Dates','TYAFWD Comdty'], index_col=['Dates'], skiprows=None, parse_dates=True, dayfirst=True, nrows=1500)
print(df.iloc[15:20,:])

            TYAFWD Comdty
Dates                    
2020-05-05          0.541
2020-05-04          0.527
2020-05-01          0.512
2020-04-30          0.528
2020-04-29          0.521

अपने वांछित कॉलम जोड़ें:

df['year']  = pd.to_datetime(df.index).year
df['month'] = pd.to_datetime(df.index).month
df['week']  = pd.to_datetime(df.index).weekofyear
print(df.iloc[15:20,:])

            TYAFWD Comdty  year  month  week
Dates                                       
2020-05-05          0.541  2020      5    19
2020-05-04          0.527  2020      5    19
2020-05-01          0.512  2020      5    18
2020-04-30          0.528  2020      4    18
2020-04-29          0.521  2020      4    18

Pd के लिए pandas प्रलेखन देखें। read_csv ऐसे कई पैरामीटर हैं जो आपको उपयोगी लग सकते हैं!

1
eNc 17 जून 2020, 10:20

मुझे आपके आउटपुट में कुछ भी गलत नहीं दिख रहा है।

ऐसा लगता है कि .to_datetime() का डिफ़ॉल्ट व्यवहार है। यह डिफ़ॉल्ट रूप से अवरोही क्रम year, month, day में फॉमेट करता है। यह "मानक" है।

हालांकि, यदि आप यह सुनिश्चित करना चाहते हैं कि डेटा ठीक से रूपांतरित हो, तो तर्क format का उपयोग करें;

df.index = df.index.to_datetime(format='%d/%m/%Y')
# that's it
0
Sy Ker 17 जून 2020, 10:13

pd.read_csv में डिफ़ॉल्ट डेटाटाइम स्वरूपण आपकी समस्या का कारण बनता है, क्योंकि यह मानता है कि /-पृथक स्वरूपण %m/%d/%Y है। मैं यह भी सुझाव दूंगा कि आप अपने कोड को थोड़ा सा सरल करें, क्योंकि इस समय बहुत सारे अनावश्यक कास्टिंग ऑपरेशन हैं:

import pandas as pd

# Result is a DataFrame already
df = pd.read_csv('BB_FUT_DATA.csv', usecols=['Dates', 'TYAFWD Comdty'], skiprows=None, nrows=1500)
df.dropna(inplace=True)
df.Dates = pd.to_datetime(df.Dates, format='%d/%m/%Y')
df.set_index('Dates', inplace=True)
# Since df.index is already of type datetime you can access the year, month, weekofyear attributes directly
df['year'] = df.index.year
df['month'] = df.index.month
df['week'] = df.index.weekofyear
print(df.head(30))

वैकल्पिक रूप से आप इसे पूरी तरह से pd.read_csv में dayfirst=True (जैसा कि @eNc ने बताया) या date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y') और na_filter का उपयोग करके NaN और NA मानों वाली पंक्तियों को छोड़ने के लिए कर सकते हैं:

import pandas as pd


df = pd.read_csv(
    'BB_FUT_DATA.csv',
    usecols=['Dates', 'TYAFWD Comdty'],
    parse_dates=True,
    dayfirst=True,
    skiprows=None,
    nrows=1500,
    index_col='Dates',
    na_filter=True
    )
df['year'] = df.index.year
df['month'] = df.index.month
df['week'] = df.index.weekofyear
print(df.head(30))

आउटपुट:

            TYAFWD Comdty  year  month  week
Dates                                       
2020-05-26          0.508  2020      5    22
2020-05-25          0.494  2020      5    22
2020-05-22          0.494  2020      5    21
2020-05-21          0.508  2020      5    21
2020-05-20          0.512  2020      5    21
2020-05-19          0.512  2020      5    21
2020-05-18          0.552  2020      5    21
2020-05-15          0.483  2020      5    20
2020-05-14          0.474  2020      5    20
2020-05-13          0.494  2020      5    20
2020-05-12          0.510  2020      5    20
2020-05-11          0.548  2020      5    20
2020-05-08          0.527  2020      5    19
2020-05-07          0.494  2020      5    19
2020-05-06          0.568  2020      5    19
2020-05-05          0.541  2020      5    19
2020-05-04          0.527  2020      5    19
2020-05-01          0.512  2020      5    18
2020-04-30          0.528  2020      4    18
2020-04-29          0.521  2020      4    18
2020-04-28          0.519  2020      4    18
2020-04-27          0.559  2020      4    18
2020-04-24          0.518  2020      4    17
2020-04-23          0.512  2020      4    17
2020-04-22          0.514  2020      4    17
2020-04-21          0.474  2020      4    17
2020-04-20          0.490  2020      4    17
2020-04-17          0.521  2020      4    16
2020-04-16          0.510  2020      4    16
2020-04-15          0.498  2020      4    16
0
kampmani 17 जून 2020, 10:53