2014-04-10 35 views
5

我正在給csv寫一個熊貓df。當我將它寫入一個csv文件時,其中一列中的某些元素被錯誤地轉換爲科學記數法/數字。例如,col_1中有字符串,例如'104D59'。這些字符串通常在csv文件中表示爲字符串,就像它們應該是的一樣。然而,偶爾的字符串,例如'104E59'正被轉換成科學記數法(例如1.04 E 61),並在隨後的csv文件中被表示爲整數。pandas to_csv:在向csv寫入熊貓時,在csv文件中禁止科學記數法

我試圖將csv文件導出到一個軟件包(即pandas - > csv - > software_new),這種數據類型的改變導致了導出問題。

有沒有辦法將df寫入csv,確保df ['problem_col']中的所有元素在結果csv中表示爲字符串還是不轉換爲科學記數法?

這裏是我已經使用寫熊貓DF到CSV的代碼: df.to_csv(「df.csv」,編碼=「UTF-8」)

我也查詢的所述D型問題列: 爲df.dtype,DF [ 'problem_column']是一個對象

回答

6

使用float_format說法:

In [11]: df = pd.DataFrame(np.random.randn(3, 3) * 10 ** 12) 

In [12]: df 
Out[12]: 
       0    1    2 
0 1.757189e+12 -1.083016e+12 5.812695e+11 
1 7.889034e+11 5.984651e+11 2.138096e+11 
2 -8.291878e+11 1.034696e+12 8.640301e+08 

In [13]: print(df.to_string(float_format='{:f}'.format)) 
        0      1     2 
0 1757188536437.788086 -1083016404775.687134 581269533538.170288 
1 788903446803.216797 598465111695.240601 213809584103.112457 
2 -829187757358.493286 1034695767987.889160 864030095.691202 

這對於to_csv同樣的工作:

df.to_csv('df.csv', float_format='{:f}'.format, encoding='utf-8') 
+1

似乎不工作於大熊貓0.17.1:TypeError:不支持的操作數類型爲%:'builtin_function_or_method'和'float' – sammosummo

+0

@ user1637894仍然適用於我的0.17.1:s。在python 2.7和3.4上測試了幾個不同的numpy版本。 –

+0

@ user1637894我建議在熊貓的github上發佈您的問題! –

0

如果你想使用的值作爲一個表格式化字符串,也就是說,作爲csvfile csv.writier的一部分,該數字可以創建列表之前格式化:

with open('results_actout_file','w',newline='') as csvfile: 
    resultwriter = csv.writer(csvfile, delimiter=',') 
    resultwriter.writerow(header_row_list) 

    resultwriter.writerow(df['label'].apply(lambda x: '%.17f' % x).values.tolist())