2017-05-02 7 views
0
df1 = pd.DataFrame(
      columns=["A", "B", "C"], 
      data=[['2017-01-01',np.nan, "ok"], ['2017-02-01',8,"fine"], ['2017-03-01',100,np.nan]]) 
df1.to_excel('test.xlsx', index=False) 

enter image description herePython - Format Werte Datum,

Export in Excel habe ich einen Datenrahmen, die Spalte Zeichenfolge ist. Ich möchte die DF exportieren, um Excel und Spalte A den Datumstyp mit dem Format DDMMMYYYY (d. H. Anstelle von '2017-01-01 Ich brauche' 01JAN2017 ').

Ich habe zwei Dinge versucht, dass sie nicht funktionieren:

df1['A'] = pd.to_datetime(df1['A']).dt.strftime('%d%b%Y') 

oder

df1['A'] = pd.to_datetime(df1['A'], format="%d%b%Y") 

Wie dies zu tun?

+0

http://stackoverflow.com/questions/16852911/how-do-i-convert-dates-in-a-pandas-data-frame-to-a-date-data-type –

Antwort

0

in Excel-Format Spalte A als benutzerdefiniertes Format:

Die Sterne sollten ohne Leerzeichen oder Operatoren können zwischen den Daten-Elemente erscheinen.

Auch read this für eine andere übernehmen Formatierung.

0

Sie können es zuerst Datetime-Objekt analysieren und dann

from datetime import datetime 
df1['A'] = datetime.strptime(df1['A'], '%Y-%m-%d').strftime("%d%b%Y").upper() 
+0

Danke, Zohaib. Ich habe diese Fehlermeldung erhalten: "TypeError: strptime() Argument 1 muss Zeichenfolge sein, nicht Series". Irgendeine Idee, wie man dieses Problem löst? – thatMeow

+0

von Ihrer Frage scheint es, dass 'df1 ['A']' ist Ihre Datumszeichenkette. Finden Sie den Ausdruck für Ihr Datum str und übergeben Sie dies anstelle von 'df1 ['A']' –

1

i einen ähnlichen Anwendungsfall musste gewünschtes Format konvertieren. Ich habe Pandas und verwendet!

vielleicht so etwas?

import pandas as pd 
import numpy as np 
import arrow 

df1 = pd.DataFrame(
    columns=["A", "B", "C"], 
    data=[ 
     ['2017-01-01',np.nan, "ok"], 
     ['2017-02-01',8,"fine"], 
     ['2017-03-01',100,np.nan] 
    ] 
) 

df1['A'] = df1['A'].apply(
    lambda val: arrow.get(val).format("DDMMMYYYY").upper() 
) 

df1.to_excel('test.xlsx', index=False)