Sự khác biệt giữa Sê-ri gấu trúc và Khung dữ liệu một cột là gì?


168

Tại sao gấu trúc tạo ra sự khác biệt giữa một Seriesvà một cột đơn DataFrame?
Nói cách khác: lý do tồn tại của Serieslớp là gì?

Tôi chủ yếu sử dụng chuỗi thời gian với chỉ số datetime, có lẽ điều đó giúp đặt bối cảnh.


Rõ ràng là chúng khác nhau, tôi nghĩ rằng bạn đang đề cập đến một số hoạt động nhất định vẫn trả về một khung dữ liệu vì bạn chỉ có một khung dữ liệu cột duy nhất hoặc do hoạt động dẫn đến một khung dữ liệu cột duy nhất. Tuy nhiên, khi chọn một cột duy nhất, không có sự mơ hồ và điều này sẽ phân hủy thành Sê-ri. Bạn phải hiển thị mã mẫu để giải thích vấn đề của bạn là gì.
EdChum


6
Vấn đề chính là tôi không thấy sự cần thiết của một đối tượng Sê-ri, với các phương thức khác nhau.
saroele

Đối với một, có một sự khác biệt không gian tên. Sê-ri chỉ có tên cấp cao nhất, bảng dữ liệu có cấp cao nhất và tên cột. Điều đó có thể dẫn đến sự khác biệt đáng kể về cú pháp để xử lý / tạo một chuỗi mới so với một cột mới.
JohnE

4
Theo như tôi có thể nói, câu hỏi này vẫn nên được trả lời. Mặc dù người ta có thể nghĩ ra DataFramenhư một dictcủa Series(mặc dù đó không phải là việc thực hiện hiện hành), nó vẫn còn chưa rõ lý do tại sao bạn sẽ không bao giờ trả về một Seriesđối tượng thay vì một DataFrame(tức là khái niệm một dictvới một bài dự thi).
Alex

Câu trả lời:


190

Trích dẫn tài liệu của Pandas

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

Cấu trúc dữ liệu dạng bảng có thể thay đổi kích thước hai chiều, có khả năng không đồng nhất với các trục có nhãn (hàng và cột). Các phép toán số học căn chỉnh trên cả nhãn hàng và cột. Có thể được coi là một thùng chứa giống như chính tả cho các đối tượng Sê-ri. Cấu trúc dữ liệu gấu trúc chính.

Vì vậy, Sê-ri là cấu trúc dữ liệu cho một cột duy nhấtDataFrame , không chỉ về mặt khái niệm, mà theo nghĩa đen, tức là dữ liệu trong a DataFramethực sự được lưu trữ trong bộ nhớ dưới dạng tập hợp Series.

Tương tự: Chúng ta cần cả danh sách và ma trận, vì ma trận được xây dựng với danh sách. Ma trận hàng đơn, trong khi tương đương với danh sách trong chức năng vẫn không thể tồn tại mà không có (các) danh sách chúng được tạo thành.

Cả hai đều có các API cực kỳ giống nhau, nhưng bạn sẽ thấy rằng DataFramecác phương thức luôn phục vụ cho khả năng bạn có nhiều hơn một cột. Và, tất nhiên, bạn luôn có thể thêm một Seriesđối tượng khác (hoặc đối tượng tương đương) vào a DataFrame, trong khi thêm một Seriesđối tượng khác Seriesliên quan đến việc tạo một DataFrame.


2
Cảm ơn câu trả lời của bạn. Câu hỏi của tôi được lấy cảm hứng từ một lỗi trong mã của tôi khi một lựa chọn trên khung dữ liệu đột nhiên trả về một chuỗi thay vào đó và tôi không thể truy cập vào thuộc tính cột. Tôi không phải là người duy nhất nhầm lẫn: stackoverflow.com/questions/16782323/ trên
saroele

Tôi hiểu rồi. Có lẽ nó sẽ giúp ích nếu họ có __repr__hành vi khác , vì vậy bạn không thể trộn lẫn chúng?
PythonNut

6
Bạn không thể kết luận bất cứ điều gì về cấu trúc dữ liệu nội bộ thực tế của một DataFrametừ Can be thought of as a dict-like container for Series objects. Trên thực tế, nó hiện được lưu trữ dưới dạng BlockManager(là một chi tiết triển khai bạn không nên dựa vào).
timdiels

1
Tôi vẫn còn bối rối, vậy khi nào tôi sẽ sử dụng khung dữ liệu Cột đơn thay vì Sê-ri?
dhiraj suvarna

4
Tôi có thể là người phạm tội, nhưng tôi không thấy câu hỏi của OP về chuỗi TẠI SAO tồn tại được trả lời. Tôi thấy một câu trả lời mô tả mối quan hệ giữa chuỗi và datafram, nhưng không phải là câu trả lời giải thích lý do tại sao chúng ta muốn có một chuỗi dưới dạng một kiểu dữ liệu riêng biệt, trái ngược với trường hợp đặc biệt của một khung dữ liệu (cụ thể là một cột chỉ có một cột).
MightyCantly

14

từ doc pandas http://pandas.pydata.org/pandas-docs/urdy/dsintro.html Sê-ri là một mảng được dán nhãn một chiều có khả năng chứa bất kỳ loại dữ liệu nào. Để đọc dữ liệu dưới dạng loạt gấu trúc:

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

DataFrame là cấu trúc dữ liệu được gắn nhãn 2 chiều với các cột có khả năng khác nhau.

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

Trong cả hai chỉ số trên là danh sách

ví dụ: Tôi có tệp csv với dữ liệu sau:

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

Để đọc dữ liệu trên dưới dạng chuỗi và khung dữ liệu:

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)

đầu ra:

>>> d
BR           Brazil
RU           Russia
IN            India

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

đầu ra:

>>> df
      area
BR   12015
RU     457
IN  457787

2
nếu bất cứ ai nỗ lực để downvote, bạn cũng có thể cố gắng đề cập đến một lý do không?
Umesh Kaushik

2
Tôi đã không downvote, nhưng mã của bạn không hoạt động. Bạn có thể muốn thay đổi file_datađể brics, thêm một dòng Mỹ tại csv, và thay đổi ['BR'....'US']để brics.index. Có lẽ đúng pupuplation.
RolfBly

@RolfBly: Cảm ơn bạn đã chỉ ra những sai lầm đó. Thật là ngớ ngẩn về phần tôi để làm cho họ. Tôi đã thay đổi chúng. Cảm ơn bạn! Và liên quan đến việc đọc rằng đó chỉ là một ví dụ tôi đã lấy các giá trị ngẫu nhiên.
Umesh Kaushik

4

Sê-ri là một đối tượng một chiều có thể chứa bất kỳ loại dữ liệu nào, chẳng hạn như số nguyên, số float và chuỗi, ví dụ

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

0 A
1 B
2 C

Cột đầu tiên của Sê-ri được gọi là chỉ mục tức là 0,1,2 cột thứ hai là dữ liệu thực tế của bạn, tức là A, B, C

DataFrames là đối tượng hai chiều có thể chứa chuỗi, danh sách, từ điển

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

2

Sê-ri là mảng có nhãn một chiều có khả năng chứa bất kỳ loại dữ liệu nào (số nguyên, chuỗi, số dấu phẩy động, đối tượng Python, v.v.). Các nhãn trục được gọi chung là chỉ mục. Phương pháp cơ bản để tạo Sê-ri là gọi:

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

DataFrame là cấu trúc dữ liệu được gắn nhãn 2 chiều với các cột có khả năng khác nhau. Bạn có thể nghĩ về nó giống như một bảng tính hoặc bảng SQL hoặc một lệnh của các đối tượng Sê-ri.

 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

Nhập dữ liệu ô tô

import pandas as pd

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

Đây là cách tập tin Cars.csv trông.

In ra các ổ drive_right dưới dạng Sê-ri:

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

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

Phiên bản khung đơn cung cấp cho Pandas Series, phiên bản khung đôi cung cấp cho Pandas DataFrame.

In ra các ổ drive_right dưới dạng DataFrame

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

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

Thêm một Series vào một Series khác sẽ tạo ra một DataFrame.


1
cảm ơn rất nhiều vì đã chỉnh sửa Bây giờ có vẻ tốt hơn nhiều. @Zoe
abhishek_7081
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.