Câu hỏi tại sao tôi nên tạo một bản sao của khung dữ liệu trong gấu trúc


Khi chọn một khung dữ liệu phụ từ một khung dữ liệu mẹ, tôi nhận thấy rằng một số lập trình viên tạo một bản sao của khung dữ liệu bằng cách sử dụng .copy() phương pháp.

Tại sao họ tạo bản sao của khung dữ liệu? Điều gì sẽ xảy ra nếu tôi không tạo một bản sao?


76
2017-12-28 02:22


gốc


Tôi đoán là họ đang đề phòng thêm để không sửa đổi khung dữ liệu nguồn. Có lẽ không cần thiết, nhưng khi bạn đang ném một cái gì đó với nhau một cách tương tác, an toàn hơn là xin lỗi. - Paul H
Tôi cho rằng đây không phải là một câu hỏi ngu ngốc khi đưa ra một câu hỏi tiêu cực. - Elizabeth Susan Joseph


Các câu trả lời:


Điều này mở rộng câu trả lời của Paul. Trong Pandas, việc lập chỉ mục một DataFrame trả về một tham chiếu đến DataFrame ban đầu. Do đó, việc thay đổi tập hợp con sẽ thay đổi DataFrame ban đầu. Vì vậy, bạn muốn sử dụng bản sao nếu bạn muốn đảm bảo DataFrame ban đầu không được thay đổi. Xem xét mã sau:

df = DataFrame({'x': [1,2]})
df_sub = df[0:1]
df_sub.x = -1
print(df)

Bạn sẽ nhận được:

x
0 -1
1  2

Ngược lại, các lá sau df không thay đổi:

df_sub_copy = df[0:1].copy()
df_sub_copy.x = -1

86
2017-12-28 20:01





Bởi vì nếu bạn không tạo bản sao thì các chỉ mục vẫn có thể được thao tác ở nơi khác ngay cả khi bạn gán dataFrame cho một tên khác.

Ví dụ:

df2 = df
func1(df2)
func2(df)

func1 có thể sửa đổi df bằng cách sửa đổi df2, để tránh điều đó:

df2 = df.copy()
func1(df2)
func2(df)

25
2017-09-22 01:27





Cần phải đề cập đến việc sao chép hoặc xem lại phụ thuộc vào loại lập chỉ mục.

Tài liệu về gấu trúc nói:

Trả lại một lượt xem so với một bản sao

Các quy tắc về thời điểm xem dữ liệu được trả về là hoàn toàn   phụ thuộc vào NumPy. Bất cứ khi nào một mảng nhãn hoặc một vector boolean   có liên quan đến hoạt động lập chỉ mục, kết quả sẽ là một bản sao.   Với việc lập chỉ mục nhãn / scalar đơn lẻ và cắt, ví dụ: df.ix [3: 6] hoặc   df.ix [:, 'A'], một khung nhìn sẽ được trả về.


8
2018-01-20 13:22





Nói chung, an toàn hơn khi làm việc trên các bản sao hơn là trên các khung dữ liệu gốc, trừ khi bạn biết rằng bạn sẽ không cần bản gốc nữa và muốn tiếp tục với phiên bản được điều khiển. Thông thường, bạn vẫn sẽ có một số sử dụng cho khung dữ liệu gốc để so sánh với phiên bản được điều khiển, vv Vì vậy, hầu hết mọi người làm việc trên các bản sao và hợp nhất ở cuối.


1
2018-03-28 23:31