Câu trả lời:
Nếu tôi hiểu chính xác, bài tập nên điền:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
df
trống, bạn có thể muốn sử dụng df['new'] = pd.Series()
(xem câu trả lời của tôi bên dưới)
Để thêm vào câu trả lời của DSM và dựa trên câu hỏi liên quan này , tôi đã chia cách tiếp cận thành hai trường hợp:
Thêm một cột đơn: Chỉ cần gán các giá trị trống cho các cột mới, ví dụ: df['C'] = np.nan
Thêm nhiều cột: Tôi khuyên bạn nên sử dụng .reindex(columns=[...])
phương pháp gấu trúc để thêm các cột mới vào chỉ mục cột của khung dữ liệu. Điều này cũng hoạt động để thêm nhiều hàng mới với .reindex(rows=[...])
. Lưu ý rằng các phiên bản mới hơn của Pandas (v> 0,20) cho phép bạn chỉ định axis
từ khóa thay vì gán rõ ràng cho columns
hoặc rows
.
Dưới đây là một ví dụ thêm nhiều cột:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
hoặc là
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Bạn cũng luôn có thể nối một khung dữ liệu mới (trống) với khung dữ liệu hiện có, nhưng điều đó không cảm thấy như là pythonic đối với tôi :)
version >= 0.20.0
xóa DataFrame và thêm các cột mới dưới dạng hàng. Ví dụ về version < 0.20.0
hoạt động tốt trên Phiên bản Pandas0.24.1
, axis=1
trong version = 0.25
. Tôi đã cố gắng sửa đổi câu trả lời của bạn để bao gồm phiên bản cập nhật, nhưng tôi đã bị từ chối bởi @kenlukas và @il_raffa. Tôi hy vọng mọi người đấu tranh để hiểu lý do tại sao phản hồi của bạn không hiệu quả với họ - như tôi - ít nhất là đi qua nhận xét này.
một giải pháp thậm chí đơn giản hơn là:
df = df.reindex(columns = header_list)
trong đó "header_list" là danh sách các tiêu đề bạn muốn xuất hiện.
bất kỳ tiêu đề nào có trong danh sách chưa được tìm thấy trong khung dữ liệu sẽ được thêm vào với các ô trống bên dưới.
vì vậy nếu
header_list = ['a','b','c', 'd']
sau đó c và d sẽ được thêm dưới dạng cột với các ô trống
Bắt đầu với v0.16.0
, DF.assign()
có thể được sử dụng để gán các cột mới ( đơn / nhiều ) cho a DF
. Các cột này được chèn theo thứ tự bảng chữ cái ở cuối DF
.
Điều này trở nên thuận lợi so với việc gán đơn giản trong trường hợp bạn muốn thực hiện một loạt các hoạt động được xâu chuỗi trực tiếp trên khung dữ liệu được trả về.
Xem xét cùng một DF
mẫu được thể hiện bởi @DSM:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
Lưu ý rằng điều này trả về một bản sao với tất cả các cột trước đó cùng với các cột mới được tạo. Để bản gốc DF
được sửa đổi cho phù hợp, hãy sử dụng nó như sau: df = df.assign(...)
vì hiện tại nó không hỗ trợ inplace
hoạt động.
Câu trả lời của @ emuning thực sự tuyệt vời khi thêm nhiều cột, nhưng tôi không thể làm cho nó hoạt động với tôi trong python 2.7. Thay vào đó, tôi tìm thấy tác phẩm này:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Đoạn mã dưới đây giải quyết câu hỏi "Làm cách nào để thêm n số cột trống vào khung dữ liệu hiện tại của tôi". Để giữ các giải pháp cho các vấn đề tương tự ở một nơi, tôi sẽ thêm nó vào đây.
Cách tiếp cận 1 (để tạo 64 cột bổ sung với tên cột từ 1-64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Cách tiếp cận 2 (để tạo 64 cột bổ sung với tên cột từ 1-64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Bạn có thể làm
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
Người ta có thể sử dụng df.insert(index_to_insert_at, column_header, init_value)
để chèn cột mới tại một chỉ mục cụ thể.
cost_tbl.insert(1, "col_name", "")
Câu lệnh trên sẽ chèn một Cột trống sau cột đầu tiên.
N/A
?