Làm cách nào để chèn một cột tại một chỉ mục cột cụ thể trong gấu trúc?


185

Tôi có thể chèn một cột tại một chỉ mục cột cụ thể trong gấu trúc không?

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

Điều này sẽ đặt cột nlà cột cuối cùng của df, nhưng không có cách nào để nói dfđể đặt nở đầu?


Chèn một cột ở đầu (cuối ngoài cùng bên trái) của DataFrame - nhiều giải pháp + giải pháp tổng quát để chèn bất kỳ chuỗi nào (không chỉ là giá trị không đổi).
cs95

Câu trả lời:


362

xem tài liệu: http://pandas.pydata.org/pandas-docs/urdy/generated/pandas.DataFrame.insert.html

sử dụng loc = 0 sẽ chèn vào đầu

df.insert(loc, column, value)

df = pd.DataFrame({'B': [1, 2, 3], 'C': [4, 5, 6]})

df
Out: 
   B  C
0  1  4
1  2  5
2  3  6

idx = 0
new_col = [7, 8, 9]  # can be a list, a Series, an array or a scalar   
df.insert(loc=idx, column='A', value=new_col)

df
Out: 
   A  B  C
0  7  1  4
1  8  2  5
2  9  3  6

18
Đối với người dùng trong tương lai, các tham số mới là "loc", "cột""value" . Nguồn
Peter Maguire

11

Bạn có thể thử trích xuất các cột dưới dạng danh sách, xoa bóp cái này theo ý muốn và giới thiệu lại khung dữ liệu của bạn:

>>> cols = df.columns.tolist()
>>> cols = [cols[-1]]+cols[:-1] # or whatever change you need
>>> df.reindex(columns=cols)

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

EDIT: điều này có thể được thực hiện trong một dòng; Tuy nhiên, điều này có vẻ hơi xấu. Có lẽ một số đề xuất sạch hơn có thể đến ...

>>> df.reindex(columns=['n']+df.columns[:-1].tolist())

   n  l  v
0  0  a  1
1  0  b  2
2  0  c  1
3  0  d  2

9

Nếu bạn muốn một giá trị duy nhất cho tất cả các hàng:

df.insert(0,'name_of_column','')
df['name_of_column'] = value

Biên tập:

Bạn cũng có thể:

df.insert(0,'name_of_column',value)

0

Đây là một câu trả lời rất đơn giản cho điều này (chỉ có một dòng).

Bạn có thể làm điều đó sau khi bạn thêm cột 'n' vào df của mình như sau.

import pandas as pd
df = pd.DataFrame({'l':['a','b','c','d'], 'v':[1,2,1,2]})
df['n'] = 0

df
    l   v   n
0   a   1   0
1   b   2   0
2   c   1   0
3   d   2   0

# here you can add the below code and it should work.
df = df[list('nlv')]
df

    n   l   v
0   0   a   1
1   0   b   2
2   0   c   1
3   0   d   2



However, if you have words in your columns names instead of letters. It should include two brackets around your column names. 

import pandas as pd
df = pd.DataFrame({'Upper':['a','b','c','d'], 'Lower':[1,2,1,2]})
df['Net'] = 0
df['Mid'] = 2
df['Zsore'] = 2

df

    Upper   Lower   Net Mid Zsore
0   a       1       0   2   2
1   b       2       0   2   2
2   c       1       0   2   2
3   d       2       0   2   2

# here you can add below line and it should work 
df = df[list(('Mid','Upper', 'Lower', 'Net','Zsore'))]
df

   Mid  Upper   Lower   Net Zsore
0   2   a       1       0   2
1   2   b       2       0   2
2   2   c       1       0   2
3   2   d       2       0   2
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.