2016-07-13 10 views
3

In Python, schreibe ich meine Pandas Dataframe in eine CSV-Datei und möchte das Dezimaltrennzeichen in ein Komma (,) ändern. Wie folgt aus:Pandas Dataframe.to_csv decimal = ',' funktioniert nicht

results.to_csv('D:/Data/Kaeashi/BigData/ProcessMining/Voorbeelden/Voorbeeld/CaseEventsCel.csv', sep=';', decimal=',') 

Aber Dezimaltrennzeichen in der CSV-Datei ist immer noch ein . Warum? Was mache ich falsch?

+1

Sie können die Version von Pandas überprüfen, indem Sie pandas .__ version__ in Ihrer Konsole eingeben. Die Dokumentation besagt, dass die gewünschte Operation "Neu in Version 0.16.0" ist. Vielleicht unterstützt deine Version das noch nicht? – Ohumeronen

Antwort

0

Irgendwie bekomme ich das auch nicht zur Arbeit. Ich benutze immer nur das folgende Skript, um es zu korrigieren. Es ist schmutzig, aber es funktioniert für meine Ende:

for col in df.columns: 
    try: 
     df[col] = df[col].apply(lambda x: float(x.replace('.','').replace(',','.'))) 
    except: 
     pass 

EDIT: die Frage falsch verstanden, Sie die gleiche Taktik umgekehrt, indem alle Schwimmer in Strings verwenden könnten :). Andererseits solltest du wahrscheinlich herausfinden, warum es nicht funktioniert. Fällig post, wenn Sie es zur Arbeit bringen.

1

Diese Funktionalität hinzugefügt wurde, bis 0.16.0

in to_csv Dezimal Option hinzugefügt, die Formatierung für nicht zur Verfügung zu stellen '' Dezimaltrennzeichen (GH781)

Upgrade-Pandas etwas jüngere und es wird klappen. Der folgende Code verwendet die 10 minute tutorial und Pandas Version 0.18.1

>>> import pandas as pd 
>>> import numpy as np 
>>> dates = pd.date_range('20130101', periods=6) 
>>> df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) 
>>> df 
        A   B   C   D 
2013-01-01 -0.157833 1.719554 0.564592 -0.228870 
2013-01-02 -0.316600 1.545763 -0.206499 0.793412 
2013-01-03 1.905803 1.172803 0.744010 1.563306 
2013-01-04 -0.142676 -0.362548 -0.554799 -0.086404 
2013-01-05 1.708246 -0.505940 -1.135422 0.810446 
2013-01-06 -0.150899 0.794215 -0.628903 0.598574 
>>> df.to_csv("test.csv", sep=';', decimal=',') 

Dies schafft eine „test.csv“ Datei, die wie folgt aussieht:

;A;B;C;D 
2013-01-01;-0,157833276159;1,71955439009;0,564592278787;-0,228870244247 
2013-01-02;-0,316599953358;1,54576303958;-0,206499307398;0,793411528039 
2013-01-03;1,90580284184;1,17280324924;0,744010110291;1,56330623177 
2013-01-04;-0,142676406494;-0,36254842687;-0,554799190671;-0,0864039782679 
2013-01-05;1,70824597265;-0,50594004498;-1,13542154086;0,810446051841 
2013-01-06;-0,150899136973;0,794214730009;-0,628902891897;0,598573645748 
0

Dieses Beispiel nehme an arbeiten (wie es funktioniert für me):

import pandas as pd 
import numpy as np 

s = pd.Series(np.random.randn(10)) 
with open('Data/out.csv', 'w') as f: 
    s.to_csv(f, index=True, header=True, decimal=',', sep=';', float_format='%.3f') 

out.csv:

; 0
0; 0,091
1; -0009
2; -1427
3; 0,022
4; -1270
5; -1.134
6; -0965
7; -1298
8; -0854
9; 0.150

ich nicht genau, warum Ihr Code nicht funktioniert, aber wie auch immer, versucht, das obige Beispiel auf Ihre Bedürfnisse zu nutzen.

+0

Auch das hat keinen Erfolg –

+0

Haben Sie versucht, installierte Pandas zu aktualisieren? –