J'ai un grand fichier CSV avec des millions de lignes. Les données ressemblent à ceci. 2 colonnes (date, score) et millions de lignes. J'ai besoin des dates manquantes (par exemple le 1/1/16, le 14/1/1/1/1/1/1/16) pour avoir des valeurs "0" dans la colonne "Score" et conserver la "date" existante et "score" intact , tous dans le même CSV. Mais j'ai aussi plusieurs scores de plusieurs (centaines probablement) sur de nombreuses dates. Donc, avoir vraiment du mal à le coder. Vous avez levé de haut quelques exemples sur Stackoverflow, mais aucun d'entre eux ne semblait travailler encore.   C'est ce que j'ai fait jusqu'à présent. Mais tout ce que je reçois, c'est une colonne d'index remplie de 3 ans de mes colonnes de «date» et de «score» remplies de '0'. J'apprécierai vraiment vos réponses et suggestions. Merci beaucoup.  P> import csv
import pandas as pd
import datetime as dt
df =pd.read_csv('myfile.csv')
dtr =pd.date_range('01.01.2016', '31.12.2018')
df.index  = pd.DatetimeIndex(df.index)
df =df.reindex(dtr,fill_value = 0)
df.to_csv('missingDateCorrected.csv', encoding ='utf-8', index =True)
3 Réponses :
juste une idée. Essayez de vous échantillonner avec 1 jour et remplissez des zéros. comme: nd = df.Resample ('d'). Pad () P>
Vous pouvez le faire comme ceci:
(Je l'ai fait avec un temps plus petit, alors changez la date de sorte qu'elle vous convient.) p>
df = pd.read_csv('myfile.csv', index_col=0)
df.index = pd.to_datetime(df.index, format='%d/%m/%y')
dtr =pd.date_range('01.01.2016', '01.10.2016', freq='D')
s = pd.Series(index=dtr)
df = pd.concat([df,s[~s.index.isin(df.index)]]).sort_index()
df = df.drop([0],axis=1).fillna(0)
df.to_csv('missingDateCorrected.csv', encoding ='utf-8', index =True)
                                Dois-je modifier mes données de fichier CSV («date» et «score») au type dict pour le faire? Parce que les données ne sont pas au format du dictionnaire. Merci.
                                                    @Non_linear ofc non. Je n'ai créé que le Dataframe de cette façon de ne pas créer de fichier. Tant que vous avez un fichier de données la date comme votre index (format de date) et une colonne avec score, cela fonctionnera. Vous pouvez ensuite ignorer jusqu'à  dTR = ...  code>                                                
pas très efficace mais fonctionnera.
import pandas as pd
df = pd.read_csv('myfile.csv', index_col=0)
df.index = pd.to_datetime(df.index, format='%d/%m/%y')
dtr = pd.date_range('01.01.2016', '31.12.2018')
# Create an empty DataFrame from selected date range
empty = pd.DataFrame(index=dtr, columns=['score'])
# Append your CSV file
df = pd.concat([df, empty[~empty.index.isin(df.index)]]).sort_index().fillna(0)
df.to_csv('missingDateCorrected.csv', encoding='utf-8', index=True)
                                Merci. Cela semble être très proche. Mais cela ajoute une date supplémentaire avec (NAN) pour chaque dates existantes.
Aucun problème - vient de mettre à jour ma réponse avec correction pour cela.
Le problème est qu'il y a quelques denttimes dupliqués tels que
15/1/16 code>. Dans la sortie, besoin sur une base sur un15/1/16 code>? Si oui, quelle shoudl sera la valeur avec15/1/16 code>? moyenne? premier?Donc, pour les 10 premières lignes dans des données d'échantillons sont nécessaires, ajoutez
1/1/16 code>,2/1/16 code>,4/1/16 code>,10/1/16 code>?Pardon. Je n'ai pas compris la question correctement. Mais pour clarifier à nouveau, pour la date à laquelle vous avez mentionné, j'en ai besoin d'avoir «0» dans le «score» tout en conservant mes autres données inchangées.
Comment a l'air dataframe définitive des 15 premières lignes de données d'échantillons?
C'est exactement comme je l'ai posté. Je viens de copier du fichier CSV et collé ici. Et je n'ai pas si je suis autorisé à poster un exemple de fichier. Merci.