Pandas to_csv wie format int-und float-Variablen zu comma seperated values

Alle Daten, die ich crunch muss gemeldet werden als durch Komma getrennte Werte. Ich bin nur daran interessiert, durch Komma getrennte Werte, nachdem die Daten geschrieben .csv-Datei. Ich mag halten Sie als int oder float in meiner pandas dataframe.

Ich ausgeben kann, die floats auf null decimal mit:

 df.to_csv('c:\Awesome\Groovy.csv', float_format = '%.0f')

aber immer wenn ich versuche ein Komma float es doens T Arbeit.

 df.to_csv('c:\Awesome\Groovy.csv', float_format = ':,.0f') ##Nope
 df.to_csv('c:\Awesome\Groovy.csv', float_format = {:,.0f}'.format) ##Nope

Und mein plan für die int-Werte, zuerst konvertieren Sie Sie zu schweben im dataframe und dann formatieren Sie Sie mit dem .to_csv Funktion. Irgendwelche Gedanken? Danke!



2 Replies
  1. 1

    Könnte dies zu notdürftigem für Sie. Jedenfalls geht hier. Mit dieser Antwort https://stackoverflow.com/a/4205875/42346 wir können unsere Kommas:

    def thous(x, sep=',', dot='.'):
        num, _, frac = str(x).partition(dot)
        num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
        if frac:
            num += dot + frac
        return num
    
    df['my_column'] = df['my_column'].apply(lambda x: thous(x))

    Mit einigen Beispiel-Daten, die ich noch herumliegen hatte von einer anderen Frage ALSO:

    >>> df = pd.DataFrame({'date':['2017-03-10','2017-03-11','2017-03-12'],
                           'activate_time':['2017-03-10 12:13:30','2017-03-11 13:57:49','2017-03-12 14:28:05'],
                           'mycol':[1234.56789,9876.54321,1111111.11111]})
    >>> df['mycol'] = df['mycol'].apply(lambda x: thous(x))
    >>> df
              activate_time        date            mycol
    0   2017-03-10 12:13:30  2017-03-10      1,234.56789
    1   2017-03-11 13:57:49  2017-03-11      9,876.54321
    2   2017-03-12 14:28:05  2017-03-12  1,111,111.11111
    • Es scheint zu funktionieren, was ich brauche, aber ich wollte es abgerundet, sodass ich geändert : def thous(x, sep=',', dot='.'): y = round(x) num, _, frac = str(y).partition(dot) num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1] # if frac: # num += dot + frac return num
    • dann einfach durchgeschleift mein dataframe: for x in list(df): df[x] = df[x].apply(lambda x: thous(x)) Also Danke!
    • Cheers, mate. Gut auf Sie für die kommenden up mit dieser änderung. Übrigens, ich bin eifersüchtig, dass Sie nur die Arbeit mit den CSVs!
    • Die csv ‚ s sind das Endprodukt, viel verrückte Sachen mit zu beginnen. Vielen Dank für Ihre Hilfe!
  2. 0

    Dies ist der code landete ich mit basierend auf bernie ‚ s Antwort oben. Ich wollte es hier posten für andere Leute.

    import re
    def thous(x, sep=',', dot='.'):
       y = round(x)
       num, _, frac = str(y).partition(dot)
       num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
       #  comment out for no 0    if frac:
       #  comment out for no 0   num += dot + frac
       return num
    
    num = df.select_dtypes(include=[np.number]) #selects only numeric dtypes
    for x in num:
         df[x] = df[x].apply(lambda x: thous(x))

    führen Sie es nur, bevor Sie die to_csv Befehl, und Sie sind golden. Prost!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.