Thêm cột vào khung dữ liệu với giá trị mặc định


186

Tôi có một khung dữ liệu hiện có mà tôi cần thêm một cột bổ sung để chứa cùng một giá trị cho mỗi hàng.

Df hiện có:

Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450

Df mới:

Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450

Tôi biết cách nối thêm cột sê-ri / khung dữ liệu hiện có. Nhưng đây là một tình huống khác, bởi vì tất cả những gì tôi cần là thêm cột 'Tên' và đặt mọi hàng thành cùng một giá trị, trong trường hợp này là 'abc'.

Câu trả lời:


293

df['Name']='abc' sẽ thêm cột mới và đặt tất cả các hàng thành giá trị đó:

In [79]:

df
Out[79]:
         Date, Open, High,  Low,  Close
0  01-01-2015,  565,  600,  400,    450
In [80]:

df['Name'] = 'abc'
df
Out[80]:
         Date, Open, High,  Low,  Close Name
0  01-01-2015,  565,  600,  400,    450  abc

34
Có cách nào khác để thực hiện điều này không? Tôi đang nhận được cảnh báo sau. Một giá trị đang cố gắng được đặt trên một bản sao của một lát cắt từ DataFrame. Thay vào đó, hãy thử sử dụng .loc [row_indexer, col_indexer] = value. Xem các cảnh báo trong tài liệu: pandas.pydata.org/pandas-docs/ sóng / sóng
vishnu viswanath

3
Điều đó có nghĩa là bạn đang gán cho một cái gì đó là bản sao chứ không phải df gốc, tôi không thể nhận xét thêm mà không thấy dữ liệu và mã của bạn dưới dạng câu hỏi. Trả lời câu hỏi trong ý kiến ​​là phản tác dụng. Mã này hoạt động, bạn đã làm một cái gì đó trước đó để đưa ra cảnh báo
EdChum

@vishnuviswanath Tôi nhận được cảnh báo chính xác giống như bạn khi tôi sử dụng Jupyter Notebook. Nó xảy ra với tôi khi tôi có các kích thước DataFrame không tầm thường (> 200 bản ghi) và một số kết hợp chuyển nhượng nhất định và chỉ cần in ra df.
Bill

4
@vishnuviswanath có lẽ bạn đã tạo một lát dữ liệu ban đầu trước đó, và sau đó cố gắng đặt cột mới trên lát đó. Thay vào đó, thêm cột mới vào khung dữ liệu gốc và sau đó tạo lát cắt sau đó. Có thể khi bạn tạo một lát dữ liệu, gấu trúc không tạo bản sao và bằng cách nào đó quản lý nó từ khung dữ liệu gốc. Đây là loại lộn xộn với tối ưu hóa đó, và do đó cảnh báo.
amit_saxena

2
Để khắc phục cảnh báo gấu trúc đã đề cập, chỉ cần lấy một bản sao của khung dữ liệu bằng cách sử dụng .copy()trước khi sử dụng (trừ khi nó rất lớn hoặc một cái gì đó hoặc hiệu suất thực sự được tính).
matanster

61

Bạn có thể sử dụng insertđể chỉ định nơi bạn muốn cột mới. Trong trường hợp này, tôi sử dụng 0để đặt cột mới ở bên trái.

df.insert(0, 'Name', 'abc')

  Name        Date  Open  High  Low  Close
0  abc  01-01-2015   565   600  400    450

Điều này không làm việc cho tôi. Ma trận ban đầu của tôi là 1460 x 41 và tôi đang cố thêm cột 1 vào phía trước : df.insert(0,'coef_fix',1). Tôi đang sử dụng JupyterLab với Python 3.0
ColinMac

2
Hoạt động tốt cho tôi. Bạn có thể không nhận ra rằng inserthoạt động inplace. Điều này có nghĩa là giá trị của khung dữ liệu mới không được trả về nhưng khung dữ liệu gốc đã được sửa đổi. Hãy thử điều nàydf = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

43

Công việc lót đơn

df['Name'] = 'abc'

Tạo một Namecột và đặt tất cả các hàng thành abcgiá trị


41

Tóm tắt những gì người khác đã đề xuất và thêm cách thứ ba

Bạn có thể:

  • gán (** kwargs) :

    df.assign(Name='abc')
  • truy cập chuỗi cột mới (nó sẽ được tạo) và đặt nó:

    df['Name'] = 'abc'
  • chèn (loc, cột, giá trị, allow_d repeatates = false)

    df.insert(0, 'Name', 'abc')

    trong đó đối số loc (0 <= loc <= len (cột)) cho phép bạn chèn cột vào nơi bạn muốn.

    'loc' cung cấp cho bạn chỉ mục mà cột của bạn sẽ ở sau khi chèn. Ví dụ, đoạn mã trên chèn tên cột là cột 0, tức là nó sẽ được chèn trước cột đầu tiên, trở thành cột đầu tiên mới. (Lập chỉ mục bắt đầu từ 0).

Tất cả các phương thức này cũng cho phép bạn thêm một cột mới từ Sê-ri (chỉ cần thay thế đối số mặc định 'abc' ở trên bằng chuỗi).

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.