Bir veri çerçevesine boş bir sütun nasıl eklenir?


262

Panda DataFramenesnesine boş bir sütun eklemenin en kolay yolu nedir ? Tökezlediğim en iyi şey

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

Daha az sapkın bir yöntem var mı?


2
Aslında boş dizeler içeren bir sütun N/Amu yoksa daha doğrusu ?
film veya

Yanıtlar:


420

Doğru anlıyorsam, atama şunları doldurmalıdır:

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

2
Bu cevap benim için yeni satırlar yarattı.
logicbloke

@logicbloke bunun nerede olduğunu gösteren bir örnek verebilir misiniz?
craymichael

@craymichael Bir süredir ama adsız ve satır adında sayı dizine sahip sütunlarım olduğuna inanıyorum ve sonunda yeni bir satır oluşturdu.
mantıkbloke

1
Eğer dfboş, kullanmak isteyebilirsiniz df['new'] = pd.Series() (aşağıda benim cevabını bakın)
Carsten

birden çok boş sütun nasıl eklenir?
M. Mariscal

46

DSM'nin cevabını eklemek ve bu ilişkili soru üzerine inşa etmek için , yaklaşımı iki duruma böldüm:

  • Tek bir sütun ekleme: Yalnızca yeni sütunlara boş değerler atayın, ör. df['C'] = np.nan

  • Birden çok sütun ekleme: Dataframe'in sütun dizinine yeni sütunlar eklemek için .reindex(columns=[...]) panda yöntemini kullanmanızı öneririm . Bu, ile birden çok yeni satır eklemek için de çalışır .reindex(rows=[...]). Panda'nın daha yeni sürümlerinin (v> 0.20) axisaçıkça columnsveya öğesine atamak yerine bir anahtar kelime belirtmenize izin verdiğini unutmayın rows.

Birden çok sütun ekleyen bir örnek:

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

veya

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

Ayrıca her zaman yeni (boş) bir veri çerçevesini mevcut veri çerçevesine birleştirebilirsiniz, ancak bu bana pitonik gelmiyor :)


3
Örnek version >= 0.20.0DataFrame'i siler ve yeni sütunları satır olarak ekler. İçin örnek version < 0.20.0Pandalar Sürüm çalışmaları cezası0.24.1
Lalo

@emunsing Bu soruya bir cevap ararken, sonunda cevabınızı faydalı buldum. Pandalar gereğine göre İlk başta, ancak, benim için çalışma değildi , axis=1de version = 0.25. Cevabınızı güncellenmiş sürümü içerecek şekilde değiştirmeye çalıştım, ancak @kenlukas ve @il_raffa tarafından reddedildim. Umarım yanıtınızın neden onlar için işe yaramadığını anlamak için uğraşan herkes, benim gibi - en azından bu yoruma rastlar.
Griff

@Griff - Şimdi, sürüm uyumluluğu sorunları hakkında daha doğru ve açık olacak şekilde cevabımı güncelledim. Bunu vurguladığınız için teşekkürler.
1919'da

35

daha basit bir çözüm:

df = df.reindex(columns = header_list)                

burada "header_list", görünmesini istediğiniz başlıkların listesidir.

Listede yer alan ve veri çerçevesinde henüz bulunmayan tüm üstbilgiler aşağıdaki boş hücrelerle eklenecektir.

yani eğer

header_list = ['a','b','c', 'd']

sonra c ve d boş hücreli sütunlar olarak eklenir


2
Daha kesin olarak, sütunlar NaN'lerle eklenecektir.
broccoli2000

19

İle başlayarak v0.16.0, DF.assign()a'ya yeni sütunlar ( tek / çoklu ) atamak için kullanılabilir DF. Bu sütunlar, sonuna alfabetik sırayla eklenir DF.

Bu, doğrudan döndürülen veri çerçevesinde bir dizi zincirleme işlem gerçekleştirmek istediğiniz durumlarda basit atamaya kıyasla avantajlı hale gelir.

DF@DSM tarafından gösterilen aynı örneği düşünün :

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

Bunun, yeni oluşturulan sütunlarla birlikte önceki tüm sütunlarla birlikte bir kopya döndürdüğünü unutmayın. Orijinalin DFbuna göre değiştirilebilmesi için şu şekilde kullanın: şu anda çalışmayı df = df.assign(...)desteklemediğinden inplace.


C için bu veri türü nedir? Dizelerin bir listesini döngü yoluyla eklemek çalışıyorum. Ama kullanmıyor.
eleijonmarck

12

Severim:

df['new'] = pd.Series(dtype='your_required_dtype')

Boş bir veri çerçeveniz varsa, bu çözüm yalnızca yeni bir satırın NaN eklenmemesini sağlar.

Eğer dtypebelirtilmemişse, yeni Pandalar sürümleri üretmek DeprecationWarning.


5

listeden sütun adı eklemek istiyorsanız

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan

4

@ emunsing'in cevabı birden çok sütun eklemek için gerçekten harika, ancak python 2.7'de benim için çalışamadım. Bunun yerine şunu buldum:

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

1

Aşağıdaki kod, "Mevcut veri çerçeveme n sayıda boş sütun nasıl eklerim" sorusunu ele alır. Benzer sorunların çözümlerini tek bir yerde tutmak amacıyla buraya ekliyorum.

Yaklaşım 1 (1-64 arasında sütun adlarıyla 64 ek sütun oluşturmak için)

m = list(range(1,65,1)) 
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists

Yaklaşım 2 (1-64 arası sütun adlarıyla 64 ek sütun oluşturmak için)

df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')

1

Yapabilirsin

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 

1

df.insert(index_to_insert_at, column_header, init_value)Belirli bir dizine yeni sütun eklemek için kullanılabilir .

cost_tbl.insert(1, "col_name", "") 

Yukarıdaki ifade, ilk sütundan sonra boş bir Sütun ekleyecektir.

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.