2014-04-10 33 views
5

Tôi đang viết một chú gấu trúc df vào csv. Khi tôi viết nó vào một tệp csv, một số phần tử trong một trong các cột đang được chuyển đổi không chính xác thành ký pháp/số khoa học. Ví dụ, col_1 có các chuỗi như '104D59' trong đó. Các chuỗi chủ yếu được biểu diễn dưới dạng các chuỗi trong tệp csv, vì chúng phải như vậy. Tuy nhiên, các chuỗi không thường xuyên, chẳng hạn như '104E59', đang được chuyển đổi thành ký hiệu khoa học (ví dụ: 1,04 E 61) và được biểu diễn dưới dạng số nguyên trong tệp csv tiếp theo.gấu trúc to_csv: ngăn chặn ký pháp khoa học trong tệp csv khi viết gấu trúc thành csv

Tôi đang cố gắng xuất tệp csv thành gói phần mềm (tức là, gấu trúc -> csv -> software_new) và thay đổi này trong loại dữ liệu đang gây ra sự cố với quá trình xuất đó.

Có cách nào để viết df thành csv không, đảm bảo rằng tất cả các phần tử trong df ['problem_col'] được biểu diễn dưới dạng chuỗi trong kết quả csv hoặc không được chuyển đổi thành ký pháp khoa học?

Đây là mã tôi đã sử dụng để viết các con gấu trúc df để một csv: df.to_csv ('df.csv', encoding = 'utf-8')

Tôi cũng kiểm tra dtype của vấn đề cột: cho df.dtype, df [ 'problem_column'] là một đối tượng

Trả lời

6

Sử dụng float_format luận:

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 

những công trình tương tự cho to_csv:

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

Không có vẻ làm việc như gấu trúc 0,17,1: LoạiError: loại toán hạng không được hỗ trợ (s) cho%: 'builtin_function_or_method' và 'float' – sammosummo

+0

@ user1637894 vẫn hoạt động với tôi với 0.17.1: s. Thử nghiệm trên trăn 2,7 và 3,4 với một vài phiên bản khác nhau. –

+0

@ user1637894 Tôi khuyên bạn nên đăng sự cố của mình lên github của gấu trúc! –

0

Nếu bạn muốn sử dụng các giá trị như chuỗi formated trong một danh sách, nói như một phần của csv.writier csvfile, những con số có thể được formated trước khi tạo một danh sách:

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()) 
Các vấn đề liên quan