[FIXED] Die Zeitnummern durcheinanderbringen und versuchen, sie zu sortieren

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like