2013-05-01 70 views
100

Cách dễ nhất để thêm cột trống vào đối tượng gấu trúc DataFrame là gì? Điều tốt nhất tôi đã vấp phải là một cái gì đó giống nhưCách thêm cột trống vào một khung dữ liệu?

df['foo'] = df.apply(lambda _: '', axis=1) 

Có phương pháp sai trái ít hơn không?

+0

Bạn có thực sự muốn có một cột chứa các chuỗi rỗng hay đúng hơn là 'N/A'? – filmor

Trả lời

153

Nếu tôi hiểu đúng, chuyển nhượng nên điền:

>>> 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 
+7

bạn có thể giải thích cho tôi biết IIUC là gì không? – lmiguelvargasf

+8

@lmiguelvargasf viết tắt của 'Nếu tôi hiểu chính xác' – einonm

16

Để thêm vào câu trả lời và xây dựng DSM về this associated question, tôi muốn chia phương pháp này thành hai trường hợp:

  • Thêm một đơn cột: Chỉ cần gán 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=[...])method of pandas để 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.

Dưới đây là một ví dụ thêm nhiều cột:

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2']) # version >= 0.20.0 

hoặc

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2']) # version < 0.20.0 

Bạn cũng có thể luôn nối một (trống) dataframe mới cho dataframe hiện có, nhưng điều đó không' t cảm thấy như pythonic với tôi :)

5

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) đến một số DF. Các cột này được chèn vào thứ tự bảng chữ cái ở cuối số DF.

Điều này trở nên thuận lợi so với việc chỉ định đơn giản trong trường hợp bạn muốn thực hiện một chuỗi các hoạt động xích trực tiếp trên khung dữ liệu trả về.

xem xét cùng DF mẫu chứng minh 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 những người mới được tạo ra. Inorder cho bản gốc DF được sửa đổi tương ứng, sử dụng nó như: df = df.assign(...) vì nó không hỗ trợ hoạt động inplace hiện tại.

+0

Kiểu dữ liệu đó cho C là gì? Tôi đang cố gắng thêm bằng cách lặp qua danh sách các chuỗi. Nhưng nó không sử dụng nó. – eleijonmarck

2

@ emunsing answer 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 thấy công trình này:

mydf = mydf.reindex(columns = np.append(mydf.columns.values, ['newcol1','newcol2']) 
9

một giải pháp đơn giản hơn thậm chí là:

df = df.reindex(columns = header_list)     

nơi "header_list" là một danh sách các tiêu đề bạn muốn xuất hiện.

bất kỳ tiêu đề nào được bao gồm trong danh sách không được tìm thấy đã có trong khung dữ liệu sẽ được thêm bằng ô 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 vào như là các cột với các tế bào trống

+0

Chính xác hơn, các cột sẽ được thêm vào với NaN. – broccoli2000

Các vấn đề liên quan