2015-08-27 25 views
0

我已經不是從使用Microsoft SQL數據庫讀取信息的過程:帶有pandas.DataFrame.to_csv()的數字格式列?

df = psql.read_sql(sql, con=connection) 
print(df) 

此功能在許多流程,這樣變量sql不具有相同的列(變結構)使用。

然後我得到的,例如,下面的數據:

STORE EMAIL_CONTACT VALUE 
10 [email protected] 2.2100 
23 [email protected] 0.7990 

一切都很好這一點。

當使用提取到CSV:

file = r"Test.csv" 
df.to_csv(file, sep=";", index=False, quoting=csv.QUOTE_ALL) 

輸出如下:

"STORE";"EMAIL_CONTACT";"VALUE" 
"10.0";"[email protected]";"2.2100" 
"23.0";"[email protected]";"0.7990" 

列存儲目前擁有」 .0" ......

是否有辦法將函數「to_csv」配置爲正確輸出(值),如打印中所示?提前致謝。

"STORE";"EMAIL_CONTACT";"VALUE" 
"10";"[email protected]";"2.2100" 
"23";"[email protected]";"0.7990" 

解決:問題是有小數點選項:

df.to_csv(file, sep=";", index=False, quoting=csv.QUOTE_ALL, decimal=",") 

"STORE";"EMAIL_CONTACT";"VALUE" 
"10";"[email protected]";"2.2100" 
"23";"[email protected]";"0.7990" 

謝謝大家的支持!

+0

爲什麼你需要引號?而且還可以檢查你存儲值的類型?打印df.STORE.dtype?只嘗試df.to_csv(file,sep =「;」,index = False) – YOBA

+0

這意味着'STORE'列dtype可能是float,請嘗試'df ['STORE'] = df ['STORE']。astype(int )'並寫出到csv – EdChum

+0

在MSSQL表中,STORE是一個DECIMAL(8,0)。 –

回答

1

STORE可能是一個浮動,檢查出來有

print df.STORE.dtype 

如果是這樣,這樣做:

df.STORE = df.STORE.astype(int) 

則:

df.to_csv("Test.csv", sep=";", index=False) 

輸出:

STORE;EMAIL_CONTACT;VALUE 
1;[email protected];2.2100 
2;[email protected];0.7990 

編輯: 對於製表使用:

df.to_csv("Test.csv", sep="\t", index=False) 

這將輸出與此格式的CSV:

STORE EMAIL_CONTACT VALUE 
1 [email protected] 2.2100 
2 [email protected] 0.7990 
+0

'print(df.STORE.dtype)'返回float64。有沒有一種方法可以完全按照顯示的方式輸出?因爲sql可以是SELECT A,B FROM TABLE或SELECT X,Y,Z FROM TABLE。 –

+0

您可以使用\ t作爲製表的sep,檢查編輯。 – YOBA

+0

表格會在值之間進行分隔,但不能準確地將文件與調整列一起導出,除非您手動執行此操作,否則它不是csv。 – YOBA