2017-05-23 2 views
0

Ich verstehe eine harte Zeit, was mit meiner SQL wird auf Pandas Datenrahmen Datentypen:Pandas Numerische Spalten wird als Objekt behandelt und coerce nicht

  • User_ID wird erwartet, dass ein ‚Objekt‘ zu sein .. was ist in Ordnung.
  • DATE ist im Format von 201.612, 201701, 201702, usw. (year_number + month_number)
  • Einkommen alle numerischen Werte wie 57,25, 50, 100.10, etc
  • ABZUEGE ist auch numerisch
  • COUNT von STORES natürlich eine ganzen Zahl sein würde ...

ich verstehe nicht, warum mein Datensatz mit dieser Zahl und Summe Feldern als Objekt zurückkommt, da ich nicht Operationen wie df.total_deductions.max() verwenden kann. Ich verstehe nicht, was das verursacht oder wie ich es beheben kann.

query = """ SELECT 
    date, 
    user_id, 
    sum(income) total_spend, 
sum(deductions) total_deductions , 
    count(distinct stores) number_stores 
    FROM db_table GROUP BY user_id """ 

df = pd.read_sql(query, jdbc_connection) 

df.dtypes: 
date: object 
user_id: object 
total_spend: float 
total_deductions: object 
number_stores: object 

Ich schaute auf die Daten. Ich kann nichts andeuten, um anzuzeigen, dass diese Zählungen oder Summen ein Objekt und nicht ein numerischer Wert wären.
Ich versuchte mit pd.to_numeric (each_of_my_columns, error = 'coerce'), aber diese Zwangs Optionen zwingt sie zu "NaN".

Kann jemand hypothetisieren, was hier vor sich gehen könnte oder wie man das löst, da ich annehme, dass ich etwas mache, das falsch offensichtlich sein sollte?

+0

ich denke, es könnte verursacht werden Mit der Version von Pandas können Sie versuchen, df.convert_objects (convert_numeric = True) oder df ['each_column']. convert_objects (convert_numeric = True)? ... nicht irgendein Objekt, das von sum zurückgegeben wird, ist vielleicht gar keine Nummer ... so das Umwandeln der Spalte weise einen Fehler in der Version von Pandas vorher auf 0.7.0 Version – Eliethesaiyan

+1

Zeigen Sie uns ein 'df.head()', würde helfen, um zu sehen, was die tatsächlichen Daten sind. – pshep123

Antwort

1

kann es ein Problem Werte haben beginnen oder enden Whitespaces, die von strip entfernt werden kann:

df['number_stores']=pd.to_numeric(df['number_stores'].astype(str).str.strip(),error='coerce') 

Sie es durch Konvertit list überprüfen:

print (df['number_stores'].tolist()[:20]) 
+0

Verstanden, habe nicht verstanden, warum zählt in sql numerische Werte zu Objekten, aber das hat es behoben .. – runningbirds

Verwandte Themen