Tambahkan kolom ke bingkai data dengan nilai konstan


187

Saya memiliki kerangka data yang sudah ada yang harus saya tambahkan kolom tambahan yang akan berisi nilai yang sama untuk setiap baris.

Df yang ada:

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

Df baru:

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

Saya tahu cara menambahkan kolom seri / bingkai data yang ada. Tetapi ini adalah situasi yang berbeda, karena yang saya butuhkan adalah menambahkan kolom 'Nama' dan mengatur setiap baris dengan nilai yang sama, dalam hal ini 'abc'.

Jawaban:


295

df['Name']='abc' akan menambahkan kolom baru dan mengatur semua baris ke nilai itu:

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

35
Apakah ada cara lain untuk melakukan hal ini?. Saya mendapatkan peringatan berikut. Nilai berusaha ditetapkan pada salinan irisan dari DataFrame. Coba gunakan .loc [row_indexer, col_indexer] = nilai sebagai gantinya. Lihat peringatan dalam dokumentasi: pandas.pydata.org/pandas-docs/stable/…
vishnu viswanath

3
Itu berarti bahwa Anda menugaskan sesuatu yang merupakan salinan dan bukan df asli, saya tidak dapat berkomentar lebih lanjut tanpa melihat data dan kode Anda dalam bentuk pertanyaan. Menjawab pertanyaan dalam komentar adalah kontra produktif. Kode ini berfungsi, Anda telah melakukan sesuatu sebelum ini untuk meningkatkan peringatan
EdChum

@vishnuviswanath Saya mendapatkan peringatan yang sama persis seperti Anda ketika saya menggunakan Jupyter Notebook. Itu terjadi pada saya ketika saya memiliki ukuran DataFrame non-sepele (> 200 catatan) dan kombinasi tugas tertentu dan hanya mencetak df.
Bill

4
@vishnuviswanath Anda mungkin telah membuat irisan kerangka data asli sebelum ini, dan kemudian mencoba mengatur kolom baru pada irisan itu. Tambahkan kolom baru ke bingkai data asli dan kemudian buat potongan setelah itu. Mungkin ketika Anda membuat sepotong dataframe, panda tidak membuat salinan dan entah bagaimana mengaturnya dari dataframe asli. Semacam ini mengacaukan optimasi itu, dan karenanya peringatan.
amit_saxena

2
Untuk mengatasi peringatan panda yang disebutkan di atas, cukup gunakan salinan kerangka data menggunakan .copy(), sebelum menggunakan ini (kecuali jika itu besar atau sesuatu atau kinerja benar-benar diperhitungkan).
matanster

61

Anda dapat menggunakan insertuntuk menentukan di mana Anda ingin kolom baru berada. Dalam hal ini, saya gunakan 0untuk menempatkan kolom baru di sebelah kiri.

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

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

Ini tidak berhasil untuk saya. Matriks asli saya adalah 1460 x 41 dan aku mencoba untuk menambahkan kolom 1 untuk depan: df.insert(0,'coef_fix',1). Saya menggunakan JupyterLab dengan Python 3.0
ColinMac

2
Bekerja dengan baik untuk saya. Anda mungkin tidak menyadari itu insertberoperasi inplace. Ini berarti bahwa nilai bingkai data baru tidak dikembalikan tetapi bingkai data asli telah dimodifikasi. Coba inidf = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

44

Single liner bekerja

df['Name'] = 'abc'

Buat Namekolom dan set semua baris ke abcnilai


41

Ringkas apa yang disarankan orang lain, dan tambahkan cara ketiga

Kamu bisa:

  • tetapkan (** kwargs) :

    df.assign(Name='abc')
  • akses seri kolom baru (akan dibuat) dan atur:

    df['Name'] = 'abc'
  • masukkan (loc, kolom, value, allow_duplicates = False)

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

    di mana loc argumen (0 <= loc <= len (kolom)) memungkinkan Anda untuk memasukkan kolom di mana Anda inginkan.

    'loc' memberi Anda indeks tempat kolom Anda berada setelah penyisipan. Sebagai contoh, kode di atas memasukkan Nama kolom sebagai kolom ke-0, yaitu akan dimasukkan sebelum kolom pertama, menjadi kolom pertama yang baru. (Pengindeksan dimulai dari 0).

Semua metode ini memungkinkan Anda untuk menambahkan kolom baru dari Seri juga (cukup gantikan argumen default 'abc' di atas dengan seri).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.