Cóż, są różne, oczywiście, myślę, że odnosisz się do pewnych operacji, które nadal zwracają ramkę danych, albo dlatego, że masz tylko pojedynczą kolumnę Dataframe, albo dlatego, że operacja skutkuje pojedynczą kolumną Dataframe. Jednak podczas wybierania pojedynczej kolumny nie ma niejednoznaczności, a to rozkłada się na Seria. Musisz pokazać przykładowy kod, aby wyjaśnić, na czym polega problem.
Głównym problemem jest to, że nie widzę potrzeby stosowania obiektu Series z różnymi metodami.
saroele
Po pierwsze, istnieje różnica przestrzeni nazw. Serie mają tylko nazwę najwyższego poziomu, ramki danych mają najwyższy poziom i nazwę kolumny. Może to prowadzić do znacznych różnic w składni przetwarzania / tworzenia nowej serii w porównaniu z nową kolumną.
JohnE
4
O ile wiem, na to pytanie należy odpowiedzieć. Chociaż można myśleć o DataFramea dictof Series(chociaż nie jest to obecna implementacja), nadal nie jest jasne, dlaczego kiedykolwiek miałbyś zwrócić Seriesobiekt zamiast a DataFrame(tj. Koncepcyjnie a dictz jednym wpisem).
Dwuwymiarowa, zmienna pod względem rozmiaru, potencjalnie heterogeniczna struktura danych tabelarycznych z oznaczonymi osiami (wierszami i kolumnami). Operacje arytmetyczne są wyrównane na etykietach wierszy i kolumn. Można go traktować jako kontener na obiekty serii. Podstawowa struktura danych pand.
Tak więc seria jest strukturą danych dla pojedynczej kolumny aDataFrame , nie tylko koncepcyjnie, ale dosłownie, tj. Dane w a DataFramesą faktycznie przechowywane w pamięci jako zbiór Series.
Analogicznie: potrzebujemy zarówno list, jak i macierzy, ponieważ macierze są zbudowane z list. Matricies jednorzędowe, mimo że równoważne listom pod względem funkcjonalności, nadal nie mogą istnieć bez list, z których się składają.
Oba mają bardzo podobne interfejsy API, ale przekonasz się, że DataFramemetody zawsze uwzględniają możliwość, że masz więcej niż jedną kolumnę. Oczywiście zawsze możesz dodać inny Series(lub równoważny obiekt) do a DataFrame, podczas gdy dodanie a Seriesdo innego Serieswiąże się z utworzeniem pliku DataFrame.
Dziękuję za odpowiedź. Moje pytanie zostało zainspirowane błędem w moim kodzie, gdy wybór w ramce danych nagle zwrócił zamiast tego serię i nie mogłem uzyskać dostępu do atrybutu kolumn. Nie tylko ja jestem zdezorientowany: stackoverflow.com/questions/16782323/…
saroele
Widzę. Może pomogłoby, gdyby zachowywali się inaczej __repr__, więc nie można ich pomylić?
PythonNut
6
Nie można wyciągnąć żadnych wniosków na temat rzeczywistej wewnętrznej struktury danych DataFramez Can be thought of as a dict-like container for Series objects. W rzeczywistości jest obecnie przechowywany jako BlockManager(co jest szczegółem implementacji, na którym nie powinieneś polegać).
timdiels
1
Nadal jestem zdezorientowany, więc kiedy powinienem użyć pojedynczej kolumny danych zamiast serii?
dhiraj suvarna
4
Mogę być pedantyczny, ale nie widzę odpowiedzi na pytanie OP, DLACZEGO seria istnieje. Widzę odpowiedź opisującą związek między szeregami a ramkami danych, ale nie odpowiedź wyjaśniającą, dlaczego powinniśmy chcieć mieć serię jako oddzielny typ danych, w przeciwieństwie do specjalnego przypadku ramki danych (mianowicie jednej z tylko jedną kolumną).
Aby odczytać powyższe dane jako serię i ramkę danych:
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)
wynik:
>>> d
BR Brazil
RU Russia
IN India
df = pd.DataFrame(file_data.area, index=['BR','RU','IN']or index = file_data.index )
jeśli ktoś stara się głosować przeciw, czy mógłbyś również spróbować podać powód?
Umesh Kaushik
2
Nie głosowałem przeciw, ale Twój kod nie działa. Możesz chcieć zmienić file_datana brics, dodać linię US do csv i zmienić ['BR'....'US']na brics.index. Być może poprawne pupuplation.
RolfBly,
@RolfBly: Dziękuję za wskazanie tych błędów. Z mojej strony było to głupie. Zmieniłem je. Dziękuję Ci! A jeśli chodzi o czytanie, to tylko przykład, który wziąłem, stąd przypadkowe wartości.
Umesh Kaushik
4
Seria to jednowymiarowy obiekt, który może zawierać dane dowolnego typu, takie jak liczby całkowite, zmiennoprzecinkowe i łańcuchy, np
import pandas as pd
x = pd.Series([A,B,C])0 A
1 B
2 C
Pierwsza kolumna serii jest nazywana indeksem, tj. 0,1,2, druga kolumna to Twoje rzeczywiste dane, czyli A, B, C
DataFrames to dwuwymiarowy obiekt, który może zawierać serie, listy, słownik
Seria to jednowymiarowa tablica z etykietami, która może przechowywać dane dowolnego typu (liczby całkowite, ciągi znaków, liczby zmiennoprzecinkowe, obiekty Pythona itp.). Etykiety osi są zbiorczo nazywane indeksami. Podstawową metodą tworzenia serii jest wywołanie:
s = pd.Series(data, index=index)
DataFrame to dwuwymiarowa oznaczona struktura danych z kolumnami potencjalnie różnych typów. Możesz myśleć o tym jak o arkuszu kalkulacyjnym, tabeli SQL lub dyktandzie obiektów Series.
DataFrame
adict
ofSeries
(chociaż nie jest to obecna implementacja), nadal nie jest jasne, dlaczego kiedykolwiek miałbyś zwrócićSeries
obiekt zamiast aDataFrame
(tj. Koncepcyjnie adict
z jednym wpisem).Odpowiedzi:
Cytując dokumentację Pandas
Tak więc seria jest strukturą danych dla pojedynczej kolumny a
DataFrame
, nie tylko koncepcyjnie, ale dosłownie, tj. Dane w aDataFrame
są faktycznie przechowywane w pamięci jako zbiórSeries
.Analogicznie: potrzebujemy zarówno list, jak i macierzy, ponieważ macierze są zbudowane z list. Matricies jednorzędowe, mimo że równoważne listom pod względem funkcjonalności, nadal nie mogą istnieć bez list, z których się składają.
Oba mają bardzo podobne interfejsy API, ale przekonasz się, że
DataFrame
metody zawsze uwzględniają możliwość, że masz więcej niż jedną kolumnę. Oczywiście zawsze możesz dodać innySeries
(lub równoważny obiekt) do aDataFrame
, podczas gdy dodanie aSeries
do innegoSeries
wiąże się z utworzeniem plikuDataFrame
.źródło
__repr__
, więc nie można ich pomylić?DataFrame
zCan be thought of as a dict-like container for Series objects
. W rzeczywistości jest obecnie przechowywany jakoBlockManager
(co jest szczegółem implementacji, na którym nie powinieneś polegać).z dokumentu pandy http://pandas.pydata.org/pandas-docs/stable/dsintro.html Seria to jednowymiarowa tablica z etykietami, która może przechowywać dowolny typ danych. Aby odczytać dane w postaci serii panda:
DataFrame to dwuwymiarowa oznaczona struktura danych z kolumnami potencjalnie różnych typów.
W obu powyższych indeksach znajduje się lista
na przykład: mam plik csv z następującymi danymi:
Aby odczytać powyższe dane jako serię i ramkę danych:
wynik:
wynik:
źródło
file_data
nabrics
, dodać linię US do csv i zmienić['BR'....'US']
nabrics.index
. Być może poprawnepupuplation
.Seria to jednowymiarowy obiekt, który może zawierać dane dowolnego typu, takie jak liczby całkowite, zmiennoprzecinkowe i łańcuchy, np
Pierwsza kolumna serii jest nazywana indeksem, tj. 0,1,2, druga kolumna to Twoje rzeczywiste dane, czyli A, B, C
DataFrames to dwuwymiarowy obiekt, który może zawierać serie, listy, słownik
źródło
Seria to jednowymiarowa tablica z etykietami, która może przechowywać dane dowolnego typu (liczby całkowite, ciągi znaków, liczby zmiennoprzecinkowe, obiekty Pythona itp.). Etykiety osi są zbiorczo nazywane indeksami. Podstawową metodą tworzenia serii jest wywołanie:
DataFrame to dwuwymiarowa oznaczona struktura danych z kolumnami potencjalnie różnych typów. Możesz myśleć o tym jak o arkuszu kalkulacyjnym, tabeli SQL lub dyktandzie obiektów Series.
źródło
Importuj dane samochodów
Oto jak wygląda plik cars.csv.
Wydrukuj kolumnę drive_right jako serię:
Wersja z pojedynczym wspornikiem zapewnia serię Pandas, a wersja z podwójnym wspornikiem zapewnia ramkę Pandas DataFrame.
Wydrukuj kolumnę drive_right jako DataFrame
Dodanie serii do innej serii powoduje utworzenie ramki DataFrame.
źródło