Panda Serisi ile tek sütunlu DataFrame arasındaki fark nedir?


170

Pandalar neden a Seriesve tek sütun arasında bir ayrım yapar DataFrame?
Başka bir deyişle: Seriessınıfın var olmasının nedeni nedir?

Ben esas olarak datetime endeksi ile zaman serisi kullanıyorum, belki de bağlamı ayarlamak için yardımcı olur.


Açıkçası farklı, tabii ki, sadece tek bir sütun veri çerçevesi var ya da işlem tek bir sütun veri çerçevesi sonuçlandığı için hala bir veri çerçevesi döndüren belirli işlemlere atıfta olduğunu düşünüyorum. Ancak tek bir sütun seçerken belirsizlik yoktur ve bu bir Seriye ayrışır. Sorununuzun ne olduğunu açıklamak için örnek kod göstermeniz gerekir.
EdChum


6
Asıl mesele, farklı yöntemlerle bir Series nesnesine ihtiyaç duymadığımdır.
saroele

Birincisi, bir ad alanı farkı var. Serinin yalnızca üst düzey bir adı vardır, veri çerçeveleri üst düzey ve bir sütun adına sahiptir. Bu, yeni bir sütuna karşı yeni bir dizi işlemek / oluşturmak için sözdiziminde önemli farklılıklara yol açabilir.
JohnE

4
Anlayabildiğim kadarıyla, bu soru hala cevaplanmalıdır. Biri düşünebiliriz olsa DataFramebir şekilde dictbir Series(yani şu anki uygulama olmasa da) Hiç bir döneceğini neden hala belirsiz Seriesbir yerine nesne DataFrame(yani kavramsal olarak bir dicttek girişle).
Alex

Yanıtlar:


191

Pandalar dokümanlarından alıntı yapma

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

Etiketlenmiş eksenlerle (satırlar ve sütunlar) iki boyutlu boyut değiştirebilen, potansiyel olarak heterojen tablo veri yapısı. Aritmetik işlemler hem satır hem de sütun etiketlerine hizalanır. Series nesneleri için dikte benzeri bir kapsayıcı olarak düşünülebilir. Birincil panda veri yapısı.

Bu nedenle, Seri,DataFrame sadece kavramsal olarak değil, kelimenin tam anlamıyla, yani a'daki verilerin DataFramebir koleksiyonu olarak bellekte saklandığı tek bir sütunun veri yapısıdırSeries .

Benzer şekilde: Hem listelere hem de matrislere ihtiyacımız var, çünkü matrisler listelerle oluşturulmuştur. Tek satırlı matrisler, işlevdeki listelere eşdeğer olsalar da, oluşturdukları listeler olmadan var olamazlar.

Her ikisinin de son derece benzer API'ları var, ancak DataFrameyöntemlerin her zaman birden fazla sütununuz olması olasılığını karşıladığını göreceksiniz . Ve tabii ki, her zaman başka ekleyebilir Seriesbir (veya eşdeğer bir nesne) DataFramebir eklerken, Seriesdiğerine Seriesbir oluşturulmasını içerir DataFrame.


2
Cevabınız için teşekkürler. Bir veri çerçevesindeki bir seçim aniden bir dizi döndüğünde ve sütunlar özniteliğine erişemediğimde sorum kodumdaki bir hatadan ilham aldı.
Kafası

Anlıyorum. Belki de farklı bir __repr__davranışları olsaydı yardımcı olurdu , bu yüzden onları karıştıramazsınız?
PythonNut

6
Bir gerçek iç veri yapısı hakkında hiçbir şey sonucuna varamayız DataFramedan Can be thought of as a dict-like container for Series objects. Aslında, şu anda BlockManager(güvenmemeniz gereken bir uygulama detayı) olarak saklanmaktadır .
timdiels

1
Hala kafam karıştı, bu yüzden ne zaman bir dizi yerine bir tek sütun veri çerçevesi kullanır?
dhiraj suvarna

4
Bilgiç olabilirim, ama OP'nin NEDEN serisinin NEDEN sorusunun cevaplandığını görmüyorum. Seri ve veri çerçeveleri arasındaki ilişkiyi açıklayan bir cevap görüyorum, ancak bir veri çerçevesinin özel bir durumu (yani yalnızca bir sütuna sahip olan) yerine neden ayrı bir veri türü olarak bir seri olmasını istediğimizi açıklayan bir cevap görmüyorum.
MightyCurious

14

pandalar doc http://pandas.pydata.org/pandas-docs/stable/dsintro.html Serisi, herhangi bir veri türünü tutabilen tek boyutlu etiketli bir dizidir. Verileri panda Serisi şeklinde okumak için:

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

DataFrame, potansiyel olarak farklı türlerde sütunlara sahip 2 boyutlu etiketli bir veri yapısıdır.

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

Yukarıdaki dizinin her ikisinde de liste

Örneğin: Aşağıdaki verileri içeren bir csv dosyam var:

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

Yukarıdaki verileri seri ve veri çerçevesi olarak okumak için:

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)

çıktı:

>>> d
BR           Brazil
RU           Russia
IN            India

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

çıktı:

>>> df
      area
BR   12015
RU     457
IN  457787

2
herhangi bir kişi aşağı itmek için çaba sarf ederse, bir sebepten de bahsetmeye çalışabilir misiniz?
Umesh Kaushik

2
İndirmedim, ancak kodunuz çalışmıyor. Sen değiştirmek isteyebilirsiniz file_dataiçin brics, bir ABD csv hattı ve değişim katmak ['BR'....'US']için brics.index. Belki de doğrudur pupuplation.
RolfBly

@RolfBly: Bu hataları gösterdiğin için teşekkür ederim. Onları yapmak benim için saçma oldu. Onları değiştirdim. Teşekkür ederim! Ve sadece bir örnek okumaya gelince rastgele değerler aldım.
Umesh Kaushik

4

Seri, tamsayılar, kayan noktalar ve dizeler gibi herhangi bir veri türünü tutabilen tek boyutlu bir nesnedir;

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

0 A
1 B
2 C

Serinin ilk sütunu dizin olarak bilinir, yani 0,1,2 ikinci sütun gerçek verilerinizdir, yani A, B, C

DataFrames serisi, listeyi, sözlüğü tutabilen iki boyutlu bir nesnedir

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

2

Seri, herhangi bir veri türünü (tamsayılar, dizeler, kayan nokta sayıları, Python nesneleri, vb.) Tutabilen tek boyutlu etiketli bir dizidir. Eksen etiketleri topluca dizin olarak adlandırılır. Seri oluşturmanın temel yöntemi:

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

DataFrame, potansiyel olarak farklı türlerde sütunlara sahip 2 boyutlu etiketli bir veri yapısıdır. Bunu bir e-tablo veya SQL tablosu veya Seri nesnelerinin bir diktesi gibi düşünebilirsiniz.

 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

Otomobil verilerini içe aktarma

import pandas as pd

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

Cars.csv dosyası şöyle görünür.

Drives_right sütununu Seri olarak yazdır:

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

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

Tek köşeli ayraç sürümü bir Pandas Serisi, çift köşeli ayraç sürümü ise bir Panda DataFrame'i verir.

Drivers_right sütununu DataFrame olarak yazdır

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

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

Bir Seriyi başka bir Seriye eklemek bir DataFrame oluşturur.


1
düzenleme için çok teşekkürler. Şimdi çok daha iyi görünüyor. @Zoe
abhishek_7081
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.