पांडा श्रृंखला और एकल-स्तंभ डेटाफ़्रेम के बीच क्या अंतर है?


168

पांडा एक Seriesऔर एक-स्तंभ के बीच अंतर क्यों करता है DataFrame?
दूसरे शब्दों में: Seriesवर्ग के अस्तित्व का कारण क्या है ?

मैं मुख्य रूप से डेटाइम इंडेक्स के साथ समय श्रृंखला का उपयोग कर रहा हूं, हो सकता है कि यह संदर्भ सेट करने में मदद करता हो।


खैर वे स्पष्ट रूप से भिन्न हैं, मुझे लगता है कि आप कुछ निश्चित ऑपरेशनों का जिक्र कर रहे हैं जो अभी भी एक डेटाफ्रेम लौटाते हैं क्योंकि आपके पास केवल एक ही कॉलम डेटाफ्रेम है या क्योंकि ऑपरेशन एकल कॉलम डेटाफ्रेम में परिणाम करता है। हालाँकि किसी एकल कॉलम का चयन करते समय कोई अस्पष्टता नहीं होती है और यह श्रृंखला के लिए विघटित हो जाता है। आपको यह बताने के लिए नमूना कोड दिखाना होगा कि आपका मुद्दा क्या है।
एडचम

संभवतः संबंधित: stackoverflow.com/questions/16782323/…
EdChum

6
मुख्य मुद्दा यह है कि मुझे अलग-अलग तरीकों से एक श्रृंखला ऑब्जेक्ट की आवश्यकता नहीं दिखती है।
सरोले

एक के लिए, एक नाम स्थान अंतर है। श्रृंखला में केवल एक शीर्ष स्तर का नाम होता है, डेटाफ्रेम में एक शीर्ष स्तर और एक स्तंभ नाम होता है। यह एक नई श्रृंखला बनाम एक नई श्रृंखला के प्रसंस्करण / निर्माण के लिए सिंटैक्स में महत्वपूर्ण अंतर पैदा कर सकता है।
जॉनई

4
जहां तक ​​मैं बता सकता हूं, इस सवाल का जवाब अभी भी दिया जाना चाहिए। भले ही एक के बारे में सोच सकते हैं DataFrameएक के रूप में dictकी Seriesहै (हालांकि कि वर्तमान कार्यान्वयन नहीं है), यह अभी भी स्पष्ट नहीं है कि क्यों क्या तुमने कभी एक वापसी होगी Seriesवस्तु एक के बजाय DataFrame(यानी धारणात्मक एक dictएक प्रविष्टि के साथ)।
एलेक्स

जवाबों:


190

पंडों को उद्धृत करते हुए डॉक्स

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

लेबल वाले कुल्हाड़ियों (पंक्तियों और स्तंभों) के साथ दो आयामी आकार-परस्पर, संभावित विषम सारणीबद्ध डेटा संरचना। अंकगणित संचालन पंक्ति और स्तंभ लेबल दोनों पर संरेखित होता है। श्रृंखला की वस्तुओं के लिए एक तानाशाह की तरह कंटेनर के रूप में सोचा जा सकता है। प्राथमिक पांडा डेटा संरचना।

तो, श्रृंखला एक एकल स्तंभ के लिए डेटा संरचना हैDataFrame , न केवल वैचारिक रूप से, बल्कि शाब्दिक रूप से, अर्थात डेटा को DataFrameसंग्रह के रूप में स्मृति में संग्रहीत किया जाता है Series

अनुरूपता: हमें सूचियों और मेट्रिसेस दोनों की आवश्यकता है, क्योंकि मैट्रिसेस को सूचियों के साथ बनाया गया है। एकल पंक्ति मैट्रिक, जबकि कार्यक्षमता में सूचियों के समतुल्य वे अभी भी उस सूची के बिना मौजूद नहीं हो सकते हैं, जिसकी वे रचना कर रहे हैं।

उनके पास दोनों समान एपीआई हैं, लेकिन आप पाएंगे कि DataFrameविधियां हमेशा इस संभावना को पूरा करती हैं कि आपके पास एक से अधिक कॉलम हैं। और, ज़ाहिर है, आप हमेशा एक और Series(या समतुल्य वस्तु) को एक में जोड़ सकते हैं DataFrame, जबकि Seriesदूसरे Seriesमें जोड़ने से ए बनाना शामिल है DataFrame


2
आपके उत्तर के लिए धन्यवाद। मेरा प्रश्न मेरे कोड में एक बग से प्रेरित था, जब डेटाफ़्रेम पर चयन के बजाय अचानक एक श्रृंखला वापस आ गई और मैं कॉलम विशेषता तक नहीं पहुंच सका। मैं केवल एक ही उलझन में नहीं हूं: stackoverflow.com/questions/16782323/…
सरोले

समझा। शायद यह मदद करेगा यदि उनके पास एक अलग __repr__व्यवहार था, तो आप उन्हें मिश्रण नहीं कर सकते हैं?
PythonNut

6
तुम एक की वास्तविक आंतरिक डेटा संरचना के बारे में कुछ भी निष्कर्ष नहीं निकाल सकता DataFrameसे Can be thought of as a dict-like container for Series objects। वास्तव में, यह वर्तमान में एक के रूप में संग्रहीत है BlockManager(जो एक कार्यान्वयन विवरण है जिस पर आपको भरोसा नहीं करना चाहिए)।
समयदिवस

1
मैं अभी भी उलझन में हूं, इसलिए मैं एक सीरीज के बजाय सिंगल कॉलम डेटाफ्रेम का उपयोग कब करूंगा?
धीरज सुवर्णा

4
मुझे पांडित्य हो सकता है, लेकिन मुझे ओपी के सवाल का जवाब क्यों नहीं मिल रहा है। मुझे श्रृंखला और डेटाफ़्रेम के बीच संबंधों का वर्णन करने वाला एक उत्तर दिखाई देता है, लेकिन यह बताने वाला उत्तर नहीं है कि हमें डेटाफ़्रेम के एक विशेष मामले (केवल एक कॉलम के साथ एक) होने के विपरीत एक अलग डेटा प्रकार के रूप में एक श्रृंखला क्यों चाहिए।
माइटीक्रियस

14

पांडा डॉक से http://pandas.pydata.org/pandas-docs/stable/dsintro.html सीरीज़ एक आयामी लेबल वाली ऐरे है जो किसी भी डेटा प्रकार को धारण करने में सक्षम है। पांडा श्रृंखला के रूप में डेटा पढ़ने के लिए:

import pandas as pd
ds = pd.Series(data, index=index)

DataFrame संभावित विभिन्न प्रकार के स्तंभों के साथ एक 2-आयामी लेबल डेटा संरचना है।

import pandas as pd
df = pd.DataFrame(data, index=index)

ऊपर के दोनों सूचकांक में सूची है

उदाहरण के लिए: मेरे पास निम्नलिखित डेटा के साथ एक सीएसवी फ़ाइल है:

,country,popuplation,area,capital
BR,Brazil,10210,12015,Brasile
RU,Russia,1025,457,Moscow
IN,India,10458,457787,New Delhi

श्रृंखला और डेटा फ़्रेम के रूप में उपरोक्त डेटा पढ़ने के लिए:

import pandas as pd
file_data = pd.read_csv("file_path", index_col=0)
d = pd.Series(file_data.country, index=['BR','RU','IN'] or index =  file_data.index)

उत्पादन:

>>> d
BR           Brazil
RU           Russia
IN            India

df = pd.DataFrame(file_data.area, index=['BR','RU','IN'] or index = file_data.index )

उत्पादन:

>>> df
      area
BR   12015
RU     457
IN  457787

2
अगर किसी को नीचा दिखाने का प्रयास करते हैं, तो क्या आप भी एक कारण बताने की कोशिश कर सकते हैं?
उमेश कौशिक

2
मैं नीचे नहीं गया, लेकिन आपका कोड काम नहीं करता है। आप को बदलने के लिए चाहते हो सकता है file_dataके लिए brics, सीएसवी को एक अमेरिकी लाइन, और परिवर्तन को जोड़ने ['BR'....'US']के लिए brics.index। शायद सही pupuplation
रॉल्फबली

@ रॉल्फबली: उन गलतियों को इंगित करने के लिए धन्यवाद। यह उन्हें बनाने के लिए मेरी ओर से मूर्खतापूर्ण था। मैंने उन्हें बदल दिया है। धन्यवाद! और पढ़ने के बारे में कि सिर्फ एक उदाहरण मैंने इसलिए यादृच्छिक मान लिया।
उमेश कौशिक

4

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

   import pandas as pd
   x = pd.Series([A,B,C]) 

0 A
1 B
2 C

सीरीज के पहले कॉलम को इंडेक्स के रूप में जाना जाता है यानी 0,1,2 दूसरा कॉलम आपका वास्तविक डेटा यानी ए, बी, सी है

DataFrames दो आयामी वस्तु है जो श्रृंखला, सूची, शब्दकोश को धारण कर सकता है

df=pd.DataFrame(rd(5,4),['A','B','C','D','E'],['W','X','Y','Z'])

2

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

s = pd.Series(data, index=index)

DataFrame संभावित विभिन्न प्रकार के स्तंभों के साथ एक 2-आयामी लेबल डेटा संरचना है। आप इसे स्प्रैडशीट या एसक्यूएल टेबल या सीरीज़ ऑब्जेक्ट्स की तरह सोच सकते हैं।

 d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
 two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
 df = pd.DataFrame(d)

0

कारों का डेटा आयात करें

import pandas as pd

cars = pd.read_csv('cars.csv', index_col = 0)

यहाँ कैसे Cars.csv फ़ाइल दिखती है।

सीरीज के रूप में ड्राइव_ राइट कॉलम प्रिंट करें:

print(cars.loc[:,"drives_right"])

    US      True
    AUS    False
    JAP    False
    IN     False
    RU      True
    MOR     True
    EG      True
    Name: drives_right, dtype: bool

एकल ब्रैकेट संस्करण पंडों की श्रृंखला देता है, डबल ब्रैकेट संस्करण पंडों का डेटाफ़्रेम देता है।

DataFrame के रूप में drive_right कॉलम प्रिंट करें

print(cars.loc[:,["drives_right"]])

         drives_right
    US           True
    AUS         False
    JAP         False
    IN          False
    RU           True
    MOR          True
    EG           True

किसी अन्य श्रृंखला में एक श्रृंखला जोड़ना एक DataFrame बनाता है।


1
संपादन के लिए बहुत बहुत धन्यवाद। यह अब काफी बेहतर लग रहा है। @ झो
abhishek_7081
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.