คุณเขียนในความคิดเห็นถึงคำตอบของ joris:
"ฉันไม่เข้าใจการตัดสินใจออกแบบสำหรับแถวเดียวในการแปลงเป็นชุดข้อมูล - ทำไมไม่ใช้ data frame ที่มีแถวเดียว"
แถวเดียวจะไม่ถูกแปลงในซีรี่ส์
มันเป็นซีรี่ส์:No, I don't think so, in fact; see the edit
วิธีที่ดีที่สุดในการคิดเกี่ยวกับโครงสร้างข้อมูลของแพนด้าคือภาชนะที่ยืดหยุ่นสำหรับข้อมูลมิติที่ต่ำกว่า ตัวอย่างเช่น DataFrame เป็นคอนเทนเนอร์สำหรับ Series และ Panel เป็นคอนเทนเนอร์สำหรับออบเจ็กต์ DataFrame เราต้องการที่จะสามารถแทรกและลบวัตถุออกจากภาชนะเหล่านี้ได้ในลักษณะเหมือนพจนานุกรม
http://pandas.pydata.org/pandas-docs/stable/overview.html#why-more-than-1-data-structure
แบบจำลองข้อมูลของวัตถุ Pandas ได้รับการเลือกเช่นนั้น เหตุผลแน่นอนอยู่ที่ความจริงที่ว่ามันทำให้แน่ใจว่ามีข้อดีบางอย่างที่ฉันไม่รู้ (ฉันไม่เข้าใจประโยคสุดท้ายของการอ้างอิงทั้งหมดอาจเป็นเหตุผล)
.
แก้ไข: ฉันไม่เห็นด้วยกับฉัน
DataFrame ไม่สามารถประกอบด้วยองค์ประกอบที่เป็น Series ได้เนื่องจากรหัสต่อไปนี้ให้ "Series" ประเภทเดียวกันเช่นกันสำหรับแถวสำหรับคอลัมน์:
import pandas as pd
df = pd.DataFrame(data=[11,12,13], index=[2, 3, 3])
print '-------- df -------------'
print df
print '\n------- df.loc[2] --------'
print df.loc[2]
print 'type(df.loc[1]) : ',type(df.loc[2])
print '\n--------- df[0] ----------'
print df[0]
print 'type(df[0]) : ',type(df[0])
ผลลัพธ์
-------- df -------------
0
2 11
3 12
3 13
------- df.loc[2] --------
0 11
Name: 2, dtype: int64
type(df.loc[1]) : <class 'pandas.core.series.Series'>
--------- df[0] ----------
2 11
3 12
3 13
Name: 0, dtype: int64
type(df[0]) : <class 'pandas.core.series.Series'>
ดังนั้นจึงไม่มีเหตุผลที่จะแสร้งทำเป็นว่า DataFrame ประกอบด้วย Series เพราะสิ่งเหล่านี้ควรจะเป็น: คอลัมน์หรือแถว? คำถามและวิสัยทัศน์โง่ ๆ
.
แล้ว DataFrame คืออะไร?
ในคำตอบรุ่นก่อนหน้านี้ฉันถามคำถามนี้โดยพยายามหาคำตอบสำหรับWhy is that?
ส่วนของคำถามของ OP และการซักถามที่คล้ายกันsingle rows to get converted into a series - why not a data frame with one row?
ในความคิดเห็นของเขา
ในขณะที่Is there a way to ensure I always get back a data frame?
แดนอัลลันตอบในส่วนนั้น
จากนั้นตามที่เอกสารของ Pandas ที่อ้างถึงข้างต้นบอกว่าโครงสร้างข้อมูลของแพนด้านั้นถูกมองว่าดีที่สุดในฐานะคอนเทนเนอร์ของข้อมูลมิติที่ต่ำกว่าสำหรับฉันแล้วฉันก็เข้าใจว่าทำไมจึงพบในลักษณะของลักษณะของโครงสร้าง DataFrame
อย่างไรก็ตามฉันตระหนักว่าคำแนะนำที่อ้างถึงนี้จะต้องไม่นำมาใช้เป็นคำอธิบายที่ชัดเจนเกี่ยวกับลักษณะโครงสร้างข้อมูลของแพนด้า
คำแนะนำนี้ไม่ได้หมายความว่า DataFrame เป็นคอนเทนเนอร์ของซีรี่ส์
เป็นการแสดงออกว่าการนำเสนอ DataFrame ทางจิตใจเป็นคอนเทนเนอร์ของ Series (แถวหรือคอลัมน์ตามตัวเลือกที่พิจารณาในช่วงเวลาหนึ่งของการให้เหตุผล) เป็นวิธีที่ดีในการพิจารณา DataFrames แม้ว่าจะไม่ใช่กรณีที่เป็นจริงอย่างเคร่งครัดก็ตาม "ดี" หมายความว่าวิสัยทัศน์นี้ทำให้สามารถใช้ DataFrames ได้อย่างมีประสิทธิภาพ นั่นคือทั้งหมด
.
แล้ววัตถุ DataFrame คืออะไร?
DataFrameระดับผลิตกรณีที่มีโครงสร้างโดยเฉพาะอย่างยิ่งเกิดขึ้นในNDFrameชั้นฐานตัวเองมาจาก PandasContainerชั้นฐานที่ยังเป็นระดับที่แม่ของซีรีส์ระดับ
โปรดทราบว่าสิ่งนี้ถูกต้องสำหรับ Pandas จนถึงเวอร์ชัน 0.12 ในเวอร์ชันที่กำลังจะมาถึง 0.13 ซีรีส์จะมาจากคลาสNDFrameเท่านั้น
from pandas import Series
print 'Series :\n',Series
print 'Series.__bases__ :\n',Series.__bases__
from pandas import DataFrame
print '\nDataFrame :\n',DataFrame
print 'DataFrame.__bases__ :\n',DataFrame.__bases__
print '\n-------------------'
from pandas.core.generic import NDFrame
print '\nNDFrame.__bases__ :\n',NDFrame.__bases__
from pandas.core.generic import PandasContainer
print '\nPandasContainer.__bases__ :\n',PandasContainer.__bases__
from pandas.core.base import PandasObject
print '\nPandasObject.__bases__ :\n',PandasObject.__bases__
from pandas.core.base import StringMixin
print '\nStringMixin.__bases__ :\n',StringMixin.__bases__
ผลลัพธ์
Series :
<class 'pandas.core.series.Series'>
Series.__bases__ :
(<class 'pandas.core.generic.PandasContainer'>, <type 'numpy.ndarray'>)
DataFrame :
<class 'pandas.core.frame.DataFrame'>
DataFrame.__bases__ :
(<class 'pandas.core.generic.NDFrame'>,)
-------------------
NDFrame.__bases__ :
(<class 'pandas.core.generic.PandasContainer'>,)
PandasContainer.__bases__ :
(<class 'pandas.core.base.PandasObject'>,)
PandasObject.__bases__ :
(<class 'pandas.core.base.StringMixin'>,)
StringMixin.__bases__ :
(<type 'object'>,)
ดังนั้นความเข้าใจของฉันคือตอนนี้อินสแตนซ์ DataFrame มีวิธีการบางอย่างที่สร้างขึ้นเพื่อควบคุมวิธีดึงข้อมูลจากแถวและคอลัมน์
วิธีการทำงานของวิธีการแยกข้อมูลเหล่านี้ได้อธิบายไว้ในหน้านี้:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing
เราพบวิธีการที่ Dan Allan กำหนดและวิธีการอื่น ๆ
เหตุใดวิธีการสกัดเหล่านี้จึงถูกสร้างขึ้นเหมือนเดิม?
นั่นเป็นเพราะพวกเขาได้รับการประเมินว่าเป็นสิ่งที่ให้ความเป็นไปได้ที่ดีกว่าและง่ายในการวิเคราะห์ข้อมูล
สิ่งที่แสดงออกในประโยคนี้อย่างแม่นยำ:
วิธีที่ดีที่สุดในการคิดเกี่ยวกับโครงสร้างข้อมูลของแพนด้าคือภาชนะที่ยืดหยุ่นสำหรับข้อมูลมิติที่ต่ำกว่า
เหตุผลของการสกัดข้อมูลจากอินสแตนซ์ DataFRame ที่ไม่โกหกในโครงสร้างของมันก็อยู่ในเหตุผลของโครงสร้างนี้ ฉันเดาว่าโครงสร้างและการทำงานของโครงสร้างข้อมูลของ Pandas ได้รับการสกัดเพื่อให้ใช้งานได้ง่ายมากที่สุดเท่าที่จะเป็นไปได้และเพื่อให้เข้าใจรายละเอียดเราต้องอ่านบล็อกของ Wes McKinney