Réponses:
Si je comprends bien, le devoir devrait remplir:
>>> 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
df
est vide, vous voudrez peut-être utiliser df['new'] = pd.Series()
(voir ma réponse ci-dessous)
Pour compléter la réponse de DSM et en s'appuyant sur cette question associée , je diviserais l'approche en deux cas:
Ajouter une seule colonne: attribuez simplement des valeurs vides aux nouvelles colonnes, par exemple df['C'] = np.nan
Ajout de plusieurs colonnes: je suggère d'utiliser la .reindex(columns=[...])
méthode des pandas pour ajouter les nouvelles colonnes à l'index des colonnes de la trame de données. Cela fonctionne également pour ajouter plusieurs nouvelles lignes avec .reindex(rows=[...])
. Notez que les versions plus récentes de Pandas (v> 0.20) vous permettent de spécifier un axis
mot clé plutôt que de l'attribuer explicitement à columns
ou rows
.
Voici un exemple d'ajout de plusieurs colonnes:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
ou
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Vous pouvez également toujours concaténer une nouvelle trame de données (vide) avec la trame de données existante, mais cela ne me semble pas aussi pythonique :)
version >= 0.20.0
supprimer le DataFrame et ajouter les nouvelles colonnes en tant que lignes. Exemple de version < 0.20.0
travaux très bien sur la version Pandas0.24.1
, axis=1
dans version = 0.25
. J'ai tenté de modifier votre réponse pour inclure la version mise à jour, mais j'ai été rejeté par @kenlukas et @il_raffa. J'espère que tout le monde a du mal à comprendre pourquoi votre réponse ne fonctionne pas pour eux - comme moi - tombe au moins sur ce commentaire.
une solution encore plus simple est:
df = df.reindex(columns = header_list)
où "header_list" est une liste des en-têtes que vous souhaitez voir apparaître.
tout en-tête inclus dans la liste qui ne se trouve pas déjà dans la trame de données sera ajouté avec des cellules vides ci-dessous.
donc si
header_list = ['a','b','c', 'd']
puis c et d seront ajoutés sous forme de colonnes avec des cellules vides
À partir de v0.16.0
, DF.assign()
pourrait être utilisé pour affecter de nouvelles colonnes ( simples / multiples ) à a DF
. Ces colonnes sont insérées par ordre alphabétique à la fin du DF
.
Cela devient avantageux par rapport à une affectation simple dans les cas où vous souhaitez effectuer une série d'opérations chaînées directement sur la trame de données retournée.
Considérez le même DF
exemple démontré par @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
Notez que cela retourne une copie avec toutes les colonnes précédentes ainsi que celles nouvellement créées. Pour que l'original DF
soit modifié en conséquence, utilisez-le comme: df = df.assign(...)
car il ne prend pas en charge le inplace
fonctionnement actuellement.
si vous souhaitez ajouter un nom de colonne à partir d'une liste
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
La réponse de @ emunsing est vraiment cool pour ajouter plusieurs colonnes, mais je n'ai pas pu le faire fonctionner pour moi en python 2.7. Au lieu de cela, j'ai trouvé que cela fonctionne:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Le code ci-dessous répond à la question "Comment ajouter n nombre de colonnes vides à ma trame de données existante". Afin de garder les solutions à des problèmes similaires en un seul endroit, je les ajoute ici.
Approche 1 (pour créer 64 colonnes supplémentaires avec des noms de colonne de 1 à 64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Approche 2 (pour créer 64 colonnes supplémentaires avec des noms de colonne de 1 à 64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Tu peux faire
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
On peut utiliser df.insert(index_to_insert_at, column_header, init_value)
pour insérer une nouvelle colonne à un index spécifique.
cost_tbl.insert(1, "col_name", "")
L'instruction ci-dessus insère une colonne vide après la première colonne.
N/A
?