J'essaie d'ajouter une ligne vide à la fin de la structure de données, mais je ne peux pas le faire, même en essayant de comprendre comment pandas) fonctionne avec la fonction append et ne l'obtient toujours pas.
Voici le code:
import pandas as pd
Excel_names = ["ARMANI+EMPORIO+AR0143-book.xlsx"]
excels = [pd.ExcelFile(name) for name in Excel_names]
frames = [x.parse(x.sheet_names[0], header=None,index_col=None).dropna(how='all') for x in excels]
for f in frames:
f.append(0, float('NaN'))
f.append(2, float('NaN'))
Il y a deux colonnes et un nombre aléatoire de lignes.
avec "print f" dans la boucle i Obtenez ceci:
0 1
0 Brand Name Emporio Armani
2 Model number AR0143
4 Part Number AR0143
6 Item Shape Rectangular
8 Dial Window Material Type Mineral
10 Display Type Analogue
12 Clasp Type Buckle
14 Case Material Stainless steel
16 Case Diameter 31 millimetres
18 Band Material Leather
20 Band Length Women's Standard
22 Band Colour Black
24 Dial Colour Black
26 Special Features second-hand
28 Movement Quartz
Ajoutez un nouveau pandas.Series à l’aide de pandas.DataFrame.append ().
Si vous souhaitez spécifier le nom (AKA l'index) de la nouvelle ligne, utilisez:
df.append(pandas.Series(name='NameOfNewRow'))
Si vous ne souhaitez pas nommer la nouvelle ligne, utilisez:
df.append(pandas.Series(), ignore_index=True)
où df
est votre pandas.DataFrame.
Vous pouvez l'ajouter en ajoutant une série à la trame de données comme suit. Je suppose en blanc que vous voulez ajouter une ligne contenant uniquement "Nan". Vous pouvez d'abord créer un objet Series avec Nan. Assurez-vous de spécifier les colonnes lors de la définition de l'objet 'Series' dans le paramètre -Index. Vous pouvez l'ajouter au FD. J'espère que ça aide!
from numpy import nan as Nan
import pandas as pd
>>> df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
... 'B': ['B0', 'B1', 'B2', 'B3'],
... 'C': ['C0', 'C1', 'C2', 'C3'],
... 'D': ['D0', 'D1', 'D2', 'D3']},
... index=[0, 1, 2, 3])
>>> s2 = pd.Series([Nan,Nan,Nan,Nan], index=['A', 'B', 'C', 'D'])
>>> result = df1.append(s2)
>>> result
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 NaN NaN NaN NaN
En supposant que df
soit votre cadre de données,
df_prime = pd.concat([df, pd.DataFrame([[np.nan] * df.shape[1]], columns=df.columns)], ignore_index=True)
où df_prime
est égal à df
avec une dernière ligne supplémentaire de NaN.
Notez que pd.concat
est lent, donc si vous avez besoin de cette fonctionnalité dans une boucle, évitez de l’utiliser. Dans ce cas, en supposant que votre index soit incrémental, vous pouvez utiliser
df.loc[df.iloc[-1].name + 1,:] = np.nan
Vous pouvez ajouter une nouvelle série et la nommer en même temps. Le nom sera l'index de la nouvelle ligne et toutes les valeurs seront automatiquement NaN.
df.append(pd.Series(name='Afterthought'))
Le code ci-dessous a fonctionné pour moi.
df.append(pd.Series([np.nan]), ignore_index = True)
En supposant que votre fichier df.index soit trié, vous pouvez utiliser:
df.loc[df.index.max() + 1] = None
Il gère bien les différents index et types de colonnes.
[EDIT] cela fonctionne avec pd.DatetimeIndex s'il y a une fréquence constante, sinon nous devons spécifier exactement le nouvel index, par exemple:
df.loc[df.index.max() + pd.Timedelta(milliseconds=1)] = None
long exemple:
df = pd.DataFrame([[pd.Timestamp(12432423), 23, 'text_field']],
columns=["timestamp", "speed", "text"],
index=pd.DatetimeIndex(start='2111-11-11',freq='ms', periods=1))
df.info()
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 1 entries, 2111-11-11 to 2111-11-11 Freq: L Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null int64 text 1 non-null object dtypes: datetime64[ns](1), int64(1), object(1) memory usage: 32.0+ bytes
df.loc[df.index.max() + 1] = None
df.info()
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 2 entries, 2111-11-11 00:00:00 to 2111-11-11 00:00:00.001000 Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null float64 text 1 non-null object dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 64.0+ bytes
df.head()
timestamp speed text
2111-11-11 00:00:00.000 1970-01-01 00:00:00.012432423 23.0 text_field
2111-11-11 00:00:00.001 NaT NaN NaN