2016-04-25 11 views
0

Ich reibe meine Haare ein wenig mit diesem. Ich habe zwei csv in Pandas Dataframes importiert beide haben eine Spalte namens SiteReference Ich möchte pd.merge verwenden, um Datenrahmen mit SiteReference als Schlüssel beizutreten.In Pandas Datenframe-Handling-Objekt Datentyp

Erste gemischte fehlgeschlagen, da pd.read unterschiedliche Interpretationen der SiteReference-Werte, in einem Fall 380500145.0 in den anderen 380500145 beide als Objekte gespeichert. Ich habe Regex ausgeführt, um die Spalten zu säubern, und dann pd.to_numeric, was zu einem Wert von 380500145.0 und einem weiteren Wert von 3.805001e + 10 führte. Sie sollten beide 380500145 sein. Ich versuchte es dann;

df['SiteReference'] = df['SiteReference'].astype(int).astype('str') 

Aber zurück;

Wie kann ich kontrollieren, wie pandas damit umgeht, vorzugsweise beim Import?

+0

Sie haben fehlende Werte in Ihrem dfs, versuchen 'df.dropna Aufruf()' erste oder 'df.loc [ df ['SiteReference']. isnull()] 'um die fehlerhaften Zeilen zu sehen, ob sie gerettet werden können. – EdChum

+0

Leider glaube ich, dass es keine einfache Möglichkeit gibt, eine Spalte in' int' zu konvertieren, wenn 'NaN' Werte sind Liebe, korrigiert zu werden). Wenn Sie die entsprechenden Zeilen nicht löschen können, wie es @EdChum vorgeschlagen hat, können Sie sie durch einen 'int'-Wert ersetzen, von dem Sie wissen, dass er nicht in Ihrem Dataset ist. Konvertieren Sie diesen Wert und konvertieren Sie ihn dann zurück in' NaN'. (Zum Beispiel, wenn Sie nur positive ganze Zahlen haben, ersetzen Sie "NaN" -Werte durch "-1".) – IanS

+0

@IanS das ist richtig, es gibt keine Methode, 'NaN' darzustellen, also muss das OP entweder die Zeilen des Ersetzens mit einigen geeigneten löschen Wert wie '0' oder' -1', danach können sie den dtype mit 'astype' nach' int' umwandeln – EdChum

Antwort

0

Perharps die beste Lösung zu vermeiden ist, dass pd.read den Typ dieses Feldes beeinflussen:

df=pd.read_csv('data.csv',sep=',',dtype={'SiteReference':str}) 
0

der Diskussion in den Kommentaren Folgen, wenn Sie schwebt als Integer-Strings zu formatieren möchten, können Sie diese verwenden:

df['SiteReference'] = df['SiteReference'].map('{:,.0f}'.format) 

Dies sollte anmutig NULL-Werte behandeln.