मुख्य सामग्री पर जाएं

Pandas में Resample: resample() और asfreq() के साथ

यह ट्यूटोरियल pandas में टाइम सीरीज़ रिसैम्पलिंग को समझाता है, जहाँ .asfreq() और .resample() जैसी विधियों से upsampling और downsampling दोनों को कवर किया गया है।
अपडेट किया गया 25 सित॰ 2026  · 7 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

डेटा विश्लेषण में समय एक बुनियादी आयाम है। समय के साथ मान बदल सकते हैं, ट्रेंड कर सकते हैं, या स्थिर रह सकते हैं। जब हम देखते हैं कि समय के साथ डेटा कैसे बदलता है, तो हम टाइम सीरीज़ के साथ काम कर रहे होते हैं।

टाइम सीरीज़ विश्लेषण में एक सामान्य कार्य हमारे डेटा में तिथियों और समयों की फ्रीक्वेंसी को समायोजित करना है, जिसे रिसैम्पलिंग कहा जाता है। इस ट्यूटोरियल में, हम Pandas का उपयोग करेंगे, जो सहज और कुशल टाइम सीरीज़ मैनिपुलेशन के लिए सशक्त टूल प्रदान करता है।

हम मूल बातें से शुरू करेंगे और धीरे-धीरे उन्नत रिसैम्पलिंग तकनीकों की ओर बढ़ेंगे। हम व्यावहारिक उदाहरण देंगे और सर्वोत्तम प्रथाएँ साझा करेंगे ताकि हमारा टाइम सीरीज़ विश्लेषण प्रभावी और प्रदर्शनक्षम रहे।

यदि आप टाइम सीरीज़ के बारे में और सीखना चाहते हैं, तो इस Python में सीरीज़ डेटा मैनिपुलेट करने वाले कोर्स को देखें।

टाइम सीरीज़ रिसैम्पलिंग क्या है?

जैसे हम डेटा को श्रेणी के आधार पर समूहित कर सकते हैं, वैसे ही रिसैम्पलिंग हमें डेटा को अलग-अलग समयांतरालों में समूहित करने देती है। यह डेटा क्लीनिंग और गहन टाइम सीरीज़ विश्लेषण दोनों के लिए उपयोगी है। उदाहरण के लिए, तुलना से पहले हमें दो टाइम सीरीज़ को एक समान फ्रीक्वेंसी पर संरेखित करने की आवश्यकता हो सकती है।

रिसैम्पलिंग के दो मुख्य प्रकार हैं:

  • Upsampling: हमारे डेटा की फ्रीक्वेंसी बढ़ाना (जैसे, वार्षिक से मासिक)। यह नए टाइम पॉइंट बनाता है जिन्हें भरना या इंटरपोलेट करना पड़ता है।
  • Downsampling: फ्रीक्वेंसी घटाना (जैसे, मासिक से वार्षिक)। इसमें नए, बड़े समयांतरालों के भीतर डेटा पॉइंट्स का एग्रीगेशन शामिल होता है।

Pandas asfreq() मेथड से रिसैम्पलिंग

pandas में हम मुख्यतः दो विधियों से रिसैम्पलिंग कर सकते हैं: .asfreq() और .resample()।

इन विधियों का उपयोग शुरू करने के लिए, पहले हमें प्रचलित pd उपनाम के साथ pandas लाइब्रेरी इम्पोर्ट करनी होगी। हम परिणामों को विज़ुअलाइज़ करने के लिए matplotlib भी इम्पोर्ट करेंगे।

import pandas as pd
import matplotlib.pyplot as plt

आइए .asfreq() मेथड से शुरू करें। यह मेथड किसी टाइम सीरीज़ को निर्दिष्ट फ्रीक्वेंसी में बदलता है और मूल डेटा को उस फ्रीक्वेंसी पर नए इंडेक्स के साथ संरेखित करके लौटाता है।

हम 1997 से 2015 तक मैड्रिड में दैनिक तापमान रिकॉर्ड वाले डेटासेट पर काम करेंगे। रिसैम्पलिंग में जाने से पहले कुछ प्रीप्रोसेसिंग स्टेप्स से शुरुआत करते हैं।

url = 'https://raw.githubusercontent.com/jcanalesluna/courses_materials/master/datasets/Madrid%20Daily%20Weather%201997-2015.csv'
df = pd.read_csv(url, usecols=['CET', 'Max TemperatureC', 'Mean TemperatureC', 'Min TemperatureC'])

# Change column names
df.columns = ['time', 'max_temp', 'mean_temp', 'min_temp']

# Convert string column to datetime
df['time'] = pd.to_datetime(df['time'])

# Set time column as index
df = df.set_index('time')

df
image11.png

asfreq() के साथ अपसैम्पलिंग

Upsampling को समझाने के लिए मान लें कि हम अपनी दैनिक तापमान रीडिंग्स को प्रति घंटा में बदलना चाहते हैं। यह हम .asfreq() मेथड के साथ पैरामीटर freq='H' देकर कर सकते हैं।

df_hour = df.asfreq('H')
df_hour

image2.png

प्राप्त डेटासेट स्पष्ट रूप से बड़ा है, क्योंकि दैनिक के बजाय प्रति घंटा डेटा के साथ नई पंक्तियाँ बनाई गई हैं। डिफ़ॉल्ट रूप से, .asfreq() मूल इंडेक्स की पहली एंट्री लेता है और शेष घंटों को null मानों से भर देता है।

प्राप्त डेटासेट काफ़ी बड़ा हो जाता है, क्योंकि दैनिक डेटा की जगह प्रति घंटा डेटा के लिए नई पंक्तियाँ बनती हैं। डिफ़ॉल्ट रूप से, .asfreq() मूल इंडेक्स की पहली एंट्री लेता है और शेष घंटों के लिए null मान बनाता है।

Pandas इन null मानों को भरने के लिए तीन रणनीतियाँ प्रदान करता है:

  • फॉरवर्ड फ़िल (ffill): अंतिम वैध ऑब्ज़र्वेशन को आगे की ओर बढ़ाता है।
  • बैकफ़िल (bfill): गैप भरने के लिए अगले वैध ऑब्ज़र्वेशन का उपयोग करता है।
  • Fill value: अनुपस्थित डेटा के लिए एक विशिष्ट मान प्रदान करता है।

पहली दो रणनीतियाँ .asfreq() में method पैरामीटर से लागू होती हैं, जबकि fill value को fill_value पैरामीटर से निर्दिष्ट किया जाता है।

df_mean_temp = df[['mean_temp']]
df_mean_temp_hour= df_mean_temp.asfreq('H')

df_mean_temp_hour['ffill'] = df_mean_temp.asfreq('H', method='ffill')
df_mean_temp_hour['bfill'] = df_mean_temp.asfreq('H', method='bfill')
df_mean_temp_hour['value'] = df_mean_temp.asfreq('H', fill_value=0)
df_mean_temp_hour

image1.png

asfreq() के साथ डाउनसैम्पलिंग

अब डाउनसैम्पलिंग देखते हैं। मान लें कि हम दैनिक फ्रीक्वेंसी को मासिक में बदलना चाहते हैं। यह .asfreq() के साथ पैरामीटर freq='M' देकर किया जा सकता है।

इस स्थिति में, हम अपने डेटा की फ्रीक्वेंसी घटा रहे हैं, यानी दैनिक से मासिक में जा रहे हैं। मूल DataFrame की 6,812 पंक्तियों की तुलना में प्राप्त DataFrame में केवल 228 पंक्तियाँ हैं।

df_month = df.asfreq(freq='M')
df_month

image5.png

ध्यान दें कि .asfreq() केवल प्रत्येक महीने के अंतिम दिन का चयन करता है और उसके मान को पूरे महीने का प्रतिनिधित्व करने के लिए उपयोग करता है। कोई एग्रीगेशन नहीं होता (जैसे, मासिक औसत तापमान निकालना)। ऐसे एग्रीगेशन करने के लिए हम अगला सेक्शन में .resample() मेथड का उपयोग करेंगे।

Pandas resample() मेथड से रिसैम्पलिंग

जहाँ .asfreq() अलग फ्रीक्वेंसी पर टाइम सीरीज़ दिखाने में उपयोगी है, वहीं रिसैम्पलिंग के साथ एग्रीगेशन करने के लिए .resample() बेहतर टूल है।

.resample() मेथड .groupby() की तरह काम करता है: यह दिए गए समयांतराल के भीतर डेटा को समूहित करता है और फिर प्रत्येक समूह पर एक या अधिक फ़ंक्शन लागू करता है। इन फ़ंक्शनों का परिणाम उस अंतराल के भीतर नई तिथि को सौंपा जाता है।

हम .resample() का उपयोग upsampling (अनुपस्थित डेटा को भरना या इंटरपोलेट करना) और downsampling (डेटा का एग्रीगेशन) दोनों के लिए करते हैं।

आइए अपनी प्रति घंटा कन्वर्ज़न पर लौटें और देखें कि .resample() के साथ upsampling कैसे काम करता है। .resample() लागू करने पर एक Resampler ऑब्जेक्ट मिलता है, जिस पर कोई और मेथड लगाकर हम DataFrame प्राप्त कर सकते हैं।

print(df.resample('H'))
DatetimeIndexResampler [freq=<Hour>, axis=0, closed=left, label=left, convention=start, origin=start_day]

Upsampling के संदर्भ में, .resample() मेथड .asfreq() के समान कार्य कर सकता है।

df.mean_temp.resample('H').asfreq()

Screenshot 2024-06-04 at 14.10.03.png

हम वही फ़िलिंग और इंटरपोलेशन रणनीतियाँ भी लागू कर सकते हैं जो हमने .asfreq() के साथ की थीं। उदाहरण के लिए, फॉरवर्ड फ़िल के लिए:

df.mean_temp.resample('H').ffill()

image6.png

लेकिन .resample() ऐसी अतिरिक्त विधियाँ भी देता है जो .asfreq() में उपलब्ध नहीं हैं। उदाहरण के लिए, हम .interpolate() मेथड का उपयोग कर सकते हैं, जो मौजूदा डेटा पॉइंट्स के बीच सीधी रेखा के साथ नए टाइम पॉइंट्स पर मानों का अनुमान लगाता है।

df.mean_temp.resample('H').interpolate()

image8.png

.resample() मेथड डाउनसैम्पलिंग में सच में चमकता है, क्योंकि यह हमारे डेटा का सार प्रस्तुत करने के लिए विभिन्न एग्रीगेशन मेथड्स लगाने देता है। उदाहरण के लिए, आइए .resample() का उपयोग करके मैड्रिड के मासिक औसत और तिमाही माध्यिका तापमान की गणना करें।

df.mean_temp.resample('M').mean()

image4.png

df.mean_temp.resample('Q').median()

image7.png

उन्नत रिसैम्पलिंग तकनीकें

हमने जिन बुनियादी कार्यों को कवर किया है, उनके अलावा Pandas की रिसैम्पलिंग विधियाँ और भी उन्नत परिदृश्यों को संभाल सकती हैं। आइए कुछ सामान्य मामलों को देखें।

कस्टम समय फ्रीक्वेंसी

रिसैम्पलिंग हमें अपनी आवश्यकता के अनुसार फ्रीक्वेंसी वाली नई टाइम सीरीज़ बनाने देती है। कुछ सामान्य फ्रीक्वेंसियाँ हैं:

  • W: साप्ताहिक फ्रीक्वेंसी (रविवार पर समाप्त)
  • M: माह-अंत फ्रीक्वेंसी
  • Q: तिमाही-अंत फ्रीक्वेंसी
  • H: प्रति घंटा फ्रीक्वेंसी

हालाँकि, हमारी ज़रूरतों के अनुसार Pandas और भी कई विकल्प देता है। हम शुरू या अंत तिथियों के आधार पर फ्रीक्वेंसी परिभाषित कर सकते हैं, कैलेंडर दिनों की जगह बिज़नेस डेज़ का उपयोग कर सकते हैं, या पूरी तरह कस्टम फ्रीक्वेंसी बना सकते हैं।

df.mean_temp.resample('M').mean() # calendar month end
df.mean_temp.resample('MS').mean() # calendar month start
df.mean_temp.resample('BM').mean() # business calendar end
df.mean_temp.resample('BMS').mean() # business calendar start

डाउनसैम्पलिंग के साथ एकाधिक एग्रीगेशन

groupby() मेथड की तरह, .resample() हमें एक साथ कई एग्रीगेशन लागू करने देता है। हम .agg() मेथड का उपयोग करके mean, median और standard deviation जैसी फ़ंक्शनों की सूची दे सकते हैं।

df.mean_temp.resample('M').agg(['mean','median','std'])

image3.png

रिसैम्पलिंग: सर्वोत्तम प्रथाएँ और सामान्य गलतियाँ

Pandas बड़े डेटासेट्स को संभालने के लिए अत्यधिक अनुकूलित है, लेकिन जैसे-जैसे हमारे DataFrames का आकार बढ़ता है, प्रोसेसिंग और मैनिपुलेशन कंप्यूटेशनल रूप से माँग वाले हो सकते हैं। यह विशेष रूप से upsampling के दौरान सही है। कल्पना करें कि प्रति घंटा टाइम सीरीज़ को सेकंड में रिसैम्पल करना – प्राप्त DataFrame बहुत बड़ा हो सकता है!

यदि बड़े डेटासेट्स के साथ प्रदर्शन संबंधी समस्याएँ आएँ, तो हम ये रणनीतियाँ अपना सकते हैं:

  • केवल वही कॉलम पढ़ें जिनका आप उपयोग करना चाहते हैं।
  • ऐसे कुशल डेटा प्रकारों का उपयोग करें जो कम मेमोरी लें।
  • फ़ाइल पढ़ते समय चंकिंग का उपयोग करें।

सौभाग्य से, pandas 2.0 और उसके बाद के संस्करण अधिक कुशल प्रोसेसिंग के लिए उन्नत तकनीकों को शामिल करते हैं। आप Pandas 2.0 पर इस लेख में और जान सकते हैं।

निष्कर्ष

रिसैम्पलिंग टाइम सीरीज़ विश्लेषण में एक बुनियादी तकनीक है, जो हमें मानों को एग्रीगेट (डाउनसैम्पलिंग) या इंटरपोलेट (अपसैम्पलिंग) करके डेटा की फ्रीक्वेंसी समायोजित करने देती है। हमने देखा कि pandas .asfreq() और .resample() जैसे सशक्त टूल देता है, जो इस प्रक्रिया को सहज और कुशल बनाते हैं।

Python में रिसैम्पलिंग और टाइम सीरीज़ मैनिपुलेशन की समझ को गहरा करने के लिए, ये संसाधन देखें:


Javier Canales Luna's photo
Author
Javier Canales Luna
LinkedIn

मैं एक स्वतंत्र डेटा विश्लेषक हूँ और दुनिया भर की कंपनियों व संगठनों के साथ डेटा साइंस परियोजनाओं पर सहयोग करता/करती हूँ। मैं 2+ वर्षों के अनुभव वाला/वाली डेटा साइंस प्रशिक्षक भी हूँ। मैं नियमित रूप से अंग्रेज़ी और स्पेनिश में डेटा साइंस से संबंधित लेख लिखता/लिखती हूँ, जिनमें से कुछ DataCamp, Towards Data Science और Analytics Vidhya जैसी स्थापित वेबसाइटों पर प्रकाशित हुए हैं। राजनीतिक विज्ञान और क़ानून की पृष्ठभूमि वाले/वाली डेटा वैज्ञानिक के रूप में, मेरा लक्ष्य लोक नीति, क़ानून और प्रौद्योगिकी के संगम पर काम करना है—विचारों की शक्ति का उपयोग करके ऐसे अभिनव समाधान और कथाएँ विकसित करना जो हमें तात्कालिक चुनौतियों, विशेषकर जलवायु संकट, से निपटने में मदद कर सकें। मैं स्वयं-अध्येता, सतत सीखने वाला/वाली और बहुविषयक दृष्टिकोण का प्रबल समर्थक/समर्थक हूँ। नई चीज़ें सीखने में कभी देर नहीं होती।

Pandas रिसैम्पलिंग से जुड़े FAQs

pandas में rolling और resample में क्या अंतर है?

रिसैम्पलिंग आपके टाइम सीरीज़ डेटा की फ्रीक्वेंसी बदलती है, जबकि रोलिंग ऑपरेशंस मूल फ्रीक्वेंसी के भीतर एक निश्चित आकार की स्लाइडिंग विंडो पर आँकड़े (स्टैटिस्टिक्स) की गणना करते हैं।

Python में resample('MS') क्या है?

resample('MS') .resample() मेथड में दिया जाने वाला एक विशिष्ट पैरामीटर है। यह pandas को डेटा को माह-प्रारंभ फ्रीक्वेंसी पर रिसैम्पल करने के लिए कहता है। 'MS' का अर्थ है Month Start।

मुझे रिसैम्पलिंग कब उपयोग करनी चाहिए?

रिसैम्पलिंग कई कार्यों के लिए उपयोगी है, जिनमें शामिल हैं:

  • तुलना के लिए कई टाइम सीरीज़ को एक सामान्य फ्रीक्वेंसी पर संरेखित करना।
  • विश्लेषण या विज़ुअलाइज़ेशन के लिए डेटा को कम फ्रीक्वेंसी पर एग्रीगेट करना (जैसे, दैनिक डेटा से मासिक औसत)।
  • इंटरपोलेशन (अपसैम्पलिंग) के माध्यम से टाइम सीरीज़ में अनुपस्थित डेटा पॉइंट्स भरना।

रिसैम्पलिंग की कमियाँ क्या हैं?

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

इन कोर्सेज़ के साथ टाइम सीरीज़ के बारे में और जानें!

कोर्स

Python में Time Series Data के लिए Machine Learning

4 घंटा
54.2K
यह पाठ्यक्रम टाइम सीरीज़ डेटा के लिए फीचर इंजीनियरिंग और मशीन लर्निंग पर केंद्रित है।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें
और देखेंRight Arrow