2014-04-10 10 views
5

Piszę panda dF do pliku CSV. Kiedy piszę to do pliku csv, niektóre elementy w jednej z kolumn są niepoprawnie konwertowane na notacje naukowe/liczby. Na przykład col_1 ma w sobie łańcuchy takie jak "104D59". Łańcuchy są zwykle reprezentowane jako ciągi w pliku csv, tak jak powinny. Jednak okazyjne ciągi znaków, takie jak "104E59", są przekształcane w notację naukową (np. 1.04 E 61) i reprezentowane jako liczby całkowite w wynikowym pliku csv.pandas to_csv: tłumienie notacji naukowej w pliku csv podczas pisania pand do csv

Próbuję wyeksportować plik CSV do pakietu oprogramowania (np. Pandy -> csv -> software_new), a zmiana typu danych powoduje problemy z tym eksportem.

Czy istnieje sposób na zapisanie pliku df w pliku CSV, upewniając się, że wszystkie elementy w df ['problem_col'] są reprezentowane jako ciąg znaków w wynikowym pliku CSV lub nie są konwertowane na notację naukową?

Oto kod użyłem do napisania pandy df do csv: df.to_csv ('df.csv' encoding = 'UTF-8')

ja również sprawdzić dtype z następujących kolumna problemów: do df.dtype df [ 'problem_column'] Celem

Odpowiedz

6

obsługi float_format argumentu:

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 

działającej podobnie do to_csv:

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

nie wydaje się działa jak panda 0.17.1: TypeError: nieobsługiwany typ (y) argumentu dla%: 'builtin_function_or_method' i 'float' – sammosummo

+0

@ user1637894 nadal działa dla mnie z 0.17.1: s. Testowany na pythonie 2.7 i 3.4 z kilkoma różnymi wersjami numpy. –

+0

@ user1637894 Polecam opublikować swój problem na github pandy! –

0

Jeśli chcesz użyć wartości jako sformatowany ciąg w liście, powiedzmy w ramach csvfile csv.writier, numery mogą być sformatowane przed utworzeniem listy:

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()) 
Powiązane problemy