Ausgabe
Ich habe eine Excel-Datei wie diese und möchte, dass die Datumsfeldnummern in den Verlauf wie (2021.7.22) konvertiert und mithilfe von Python im Verlaufsfeld erneut ersetzt werden.
Ein Freund hat mir einen Code geschickt, der mir fast geantwortet hat, aber es gibt immer noch einen Fehler im Code.
Dies ist der Code, den ich verwendet habe
import pandas as pd
dfs = pd.read_excel('apal.xlsx', sheet_name=None)
output = {}
for ws, df in dfs.items():
if 'date' in df.columns:
df['date'] = df['date'].apply(lambda x: f'{str(x)[:4]}.'
f'{str(x)[4:6 if len(str(x)) > 7 else 5]}.{str(x)[-2:]}')
output[ws] = df
writer = pd.ExcelWriter('TestOutput.xlsx')
for ws, df in output.items():
df.to_excel(writer, index=None, sheet_name=ws)
writer.save()
writer.close()
Aber die Ausgabe hat einen Fehler und in einigen Daten werden die Monatszahlen neben die Tageszahlen umgeschrieben.
Wie 2021.3.32 existierte eine solche Nummer tatsächlich überhaupt nicht in meinen ursprünglichen Daten
Lösung
Sie müssen die Mehrdeutigkeit für Daten wie lösen 2021111
. Zum ersten Mal können Sie verwenden pd.to_datetime
:
df['date2'] = pd.to_datetime(df['date'], format='%Y%m%d').dt.strftime('%Y.%-m.%-d')
print(df)
# Output
date date2
0 2021227 2021.2.27
1 2021228 2021.2.28
2 202131 2021.3.1
3 202132 2021.3.2
4 202133 2021.3.3
5 202136 2021.3.6
6 202137 2021.3.7
7 202138 2021.3.8
8 202139 2021.3.9
9 2021310 2021.3.10
10 2021313 2021.3.13
11 2021314 2021.3.14
12 2021315 2021.3.15
13 2021111 2021.11.1 # <- default interpretation of 2021111
Beantwortet von – Corralien
Antwort geprüft von – Senaida (FixError Volunteer)