Sabit değere sahip veri çerçevesine sütun ekleme


187

Her satır için aynı değeri içerecek ek bir sütun eklemek için gereken mevcut bir veri çerçevesi var.

Mevcut df:

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

Yeni df:

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

Varolan bir seri / veri çerçevesi sütununu eklemeyi biliyorum. Ama bu farklı bir durum, çünkü ihtiyacım olan tek şey 'Ad' sütununu eklemek ve her satırı aynı değere ayarlamak, bu durumda 'abc'.

Yanıtlar:


295

df['Name']='abc' yeni sütunu ekler ve tüm satırları bu değere ayarlar:

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
Bunu yapmanın başka bir yolu var mı? Aşağıdaki uyarıyı alıyorum. DataFrame'den bir dilimin kopyasında bir değer ayarlanmaya çalışıyor. Bunun yerine .loc [row_indexer, col_indexer] = değer kullanmayı deneyin. Belgelerdeki uyarılara bakın: pandas.pydata.org/pandas-docs/stable/…
vishnu viswanath

3
Bu, orijinal df değil kopya olan bir şeye atadığınız anlamına gelir, verileri ve kodunuzu bir soru biçiminde görmeden daha fazla yorum yapamam. Yorumlardaki soruları cevaplamak tersine verimlidir. Bu kod işe yarıyor, bundan önce uyarıyı yükseltmek için bir şey yaptınız
EdChum

@vishnuviswanath Jupyter Notebook'u kullanırken aynı uyarıyı alıyorum. Önemsiz DataFrame boyutları (> 200 kayıt) ve belirli atama kombinasyonları olduğunda ve sadece df'yi yazdırdığımda bana oluyor.
Bill

4
@vishnuviswanath muhtemelen bundan önce orijinal veri çerçevesinden bir dilim oluşturdunuz ve daha sonra bu dilimdeki yeni sütunu ayarlamaya çalışıyorsunuz. Bunun yerine yeni sütunu orijinal veri çerçevesine ekleyin ve bundan sonra dilimi oluşturun. Muhtemelen bir veri çerçevesinden bir dilim oluşturduğunuzda, pandalar bir kopya oluşturmaz ve bir şekilde orijinal veri çerçevesinden yönetir. Bu tür bir optimizasyon ve dolayısıyla uyarı ile uğraşmak.
amit_saxena

2
Bahsedilen pandalar uyarısını geçici olarak çözmek için .copy(), bunu kullanmadan önce veri çerçevesinin bir kopyasını alın (çok büyük veya bir şey veya performans gerçekten önemli değilse).
matanster

61

Sen kullanabilirsiniz insertolmak yeni sütuna istediğiniz alanları belirleyin. Bu durumda, 0yeni sütunu sola yerleştirmek için kullanıyorum .

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

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

Bu benim için işe yaramıyor. Benim orijinal matris 1460 x 41 ve Cepheye 1 yılların sütun eklemek çalışılıyor: df.insert(0,'coef_fix',1). JupyterLab'ı Python 3.0 ile kullanıyorum
ColinMac

2
Benim için iyi çalışıyor. Bunun insertçalıştığını fark etmemiş olabilirsiniz inplace. Bu, yeni veri çerçevesinin değerinin döndürülmediği, ancak orijinal veri çerçevesinin değiştirildiği anlamına gelir. Bunu deneyindf = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

44

Tek astar işleri

df['Name'] = 'abc'

Bir Namesütun oluşturur ve tüm satırları abcdeğere ayarlar


41

Diğerlerinin önerilerini özetlemek ve üçüncü bir yol eklemek

Yapabilirsin:

  • atama (** kwargs) :

    df.assign(Name='abc')
  • yeni sütun serisine erişin (oluşturulacaktır) ve ayarlayın:

    df['Name'] = 'abc'
  • insert (loc, sütun, değer, allow_duplicates = False)

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

    burada loc (0 <= loc <= len (sütunlar) bağımsız değişkeni, sütunu istediğiniz yere eklemenizi sağlar.

    'loc' , eklemeden sonra sütununuzun bulunacağı dizini verir . Örneğin, yukarıdaki kod Adı sütununu 0'ıncı sütun olarak ekler, yani ilk sütundan önce yeni ilk sütun olacak şekilde eklenir . (Dizin oluşturma 0'dan başlar).

Tüm bu yöntemler bir Seriden yeni bir sütun eklemenize izin verir (sadece yukarıdaki 'abc' varsayılan bağımsız değişkenini serilerle değiştirin).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.