J'ai des données avec un grand nombre de colonnes :
df:
ID col1 col2 col3 ... col100
1 a x 0 1
1 a x 1 1
2 a y 1 1
4 a z 1 0
...
98 a z 1 1
100 a x 1 0
Je veux combler les lacunes ID
avec une valeur par défaut qui indique que les données sont manquantes ici. Par exemple, ici, ce serait ID
3
et hypothétiquement, disons que les données de la ligne manquante ressemblent à ceci ID
100
ID col1 col2 col3 ... col100
3 a x 1 0
99 a x 1 0
Sortie attendue :
df:
ID col1 col2 col3 ... col100
1 a x 0 1
1 a x 1 1
2 a y 1 1
3 a x 1 0
4 a z 1 0
...
98 a z 1 1
99 a x 1 0
100 a x 1 0
Je suis également d'accord pour que les 3 et 99 soient en bas.
J'ai essayé plusieurs façons d'ajouter de nouvelles lignes :
noresponse = df[filterfornoresponse].head(1).copy() #assume that this will net us row 100
for i in range (1, maxID):
if len(df[df['ID'] == i) == 0: #IDs with no rows ie missing data
temp = noresponse.copy()
temp['ID'] = i
df.append(temp, ignore_index = True)
Cette méthode ne semble pas ajouter quoi que ce soit.
J'ai également essayé
pd.concat([df, temp], ignore_index = True)
au lieu de df.append
J'ai également essayé d'ajouter les lignes à une liste. noresponserows
avec l'intention de concilier la liste avec df
:
noresponserows = []
for i in range (1, maxID):
if len(df[df['ID'] == i) == 0: #IDs with no rows ie missing data
temp = noresponse.copy()
temp['ID'] = i
noresponserows.append(temp)
Mais ici, la liste ne contient toujours qu'une seule ligne, alors que je sais qu'il y a plusieurs lignes à ajouter dans mes données.
Je ne sais pas pourquoi j'ai du mal à ajouter plus d'une instance de noresponse
dans la liste, et pourquoi je ne peux pas ajouter directement à un cadre de données. J'ai l'impression que quelque chose m'échappe ici.
Je pense que ça peut avoir un rapport avec le fait que j'ai pris une copie d'une rangée dans le df
par rapport à la construction d'un nouveau bâtiment. La raison pour laquelle je prends une copie d'une rangée pour obtenir noresponse
c'est parce qu'il y a un grand nombre de colonnes, il est donc plus facile de prendre une ligne existante.