Anpassa importer: tolka datum

Effektiv datainläsning med pandas

Amany Mahfouz

Instructor

Datum- och tidsdata

  • Datum och tider har en egen datatyp och intern representation
  • Datetime-värden kan omvandlas till strängrepresentationer
  • En gemensam uppsättning koder beskriver datetime-strängformatering
Effektiv datainläsning med pandas

pandas och Datetimes

  • Datetime-kolumner läses in som objekt (strängar) som standard
  • Ange att kolumner innehåller datetime med argumentet parse_dates (inte dtype!)
  • parse_dates kan ta emot:
    • en lista med kolumnnamn eller kolumnnummer att tolka
    • en lista med listor över kolumner att kombinera och tolka
    • en dictionary där nycklarna är nya kolumnnamn och värdena är listor med kolumner att tolka tillsammans
Effektiv datainläsning med pandas

pandas och Datetimes

Kalkylblad med datum- och tidskolumner i olika format

Effektiv datainläsning med pandas

pandas och Datetimes

Kalkylblad med datum- och tidsdata där kolumner i standardformat är markerade

Effektiv datainläsning med pandas

pandas och Datetimes

Kalkylblad med datum- och tidsdata, med en datumkolumn och en tidskolumn markerade

Effektiv datainläsning med pandas

pandas och Datetimes

Kalkylblad med datum- och tidsdata, med en kolumn i ovanligt datetime-format markerad

Effektiv datainläsning med pandas

Tolka datum

# List columns of dates to parse
date_cols = ["Part1StartTime", "Part1EndTime"]

# Load file, parsing standard datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
Effektiv datainläsning med pandas

Tolka datum

# Check data types of timestamp columns
print(survey_df[["Part1StartTime", 
                 "Part1EndTime", 
                 "Part2StartDate", 
                 "Part2StartTime", 
                 "Part2EndTime"]].dtypes)
Part1StartTime    datetime64[ns]
Part1EndTime      datetime64[ns]
Part2StartDate            object
Part2StartTime            object
Part2EndTime              object
dtype: object
Effektiv datainläsning med pandas

Tolka datum

# List columns of dates to parse
date_cols = ["Part1StartTime", 
             "Part1EndTime",

[["Part2StartDate", "Part2StartTime"]]]
# Load file, parsing standard and split datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
print(survey_df.head(3))
  Part2StartDate_Part2StartTime   Age       ...    SchoolMajor  StudentDebtOwe
0           2016-03-29 21:24:57  28.0       ...            NaN           20000
1           2016-03-29 21:27:14  22.0       ...            NaN             NaN
2           2016-03-29 21:27:13  19.0       ...            NaN             NaN

[3 rows x 98 columns]
Effektiv datainläsning med pandas

Tolka datum

# List columns of dates to parse
date_cols = {"Part1Start": "Part1StartTime", 
             "Part1End": "Part1EndTime",
             "Part2Start": ["Part2StartDate", 
                             "Part2StartTime"]}


# Load file, parsing standard and split datetime columns survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols) print(survey_df.Part2Start.head(3))
0   2016-03-29 21:24:57
1   2016-03-29 21:27:14
2   2016-03-29 21:27:13
Name: Part2Start, dtype: datetime64[ns]
Effektiv datainläsning med pandas

Icke-standardiserade datum

  • parse_dates fungerar inte med datetime-format som avviker från standarden
  • Använd pd.to_datetime() efter inläsning om parse_dates inte fungerar
  • Argument till to_datetime():
    • Dataframe och kolumn att konvertera
    • format: strängrepresentation av datetime-formatet
Effektiv datainläsning med pandas

Datetime-formatering

  • Beskriv datetime-strängformatering med koder och tecken
  • Se strftime.org för den fullständiga listan
Effektiv datainläsning med pandas

Datetime-formatering

Kod Betydelse Exempel
%Y År (4 siffror) 1999
%m Månad (med inledande nolla) 03
%d Dag (med inledande nolla) 01
%H Timme (24-timmarsformat) 21
%M Minut (med inledande nolla) 09
%S Sekund (med inledande nolla) 05
Effektiv datainläsning med pandas

Tolka icke-standardiserade datum

Kalkylblad med datum- och tidsdata, med en kolumn i ovanligt datetime-format markerad

format_string = "%m%d%Y %H:%M:%S"

survey_df["Part2EndTime"] = pd.to_datetime(survey_df["Part2EndTime"], format=format_string)
Effektiv datainläsning med pandas

Tolka icke-standardiserade datum

print(survey_df.Part2EndTime.head())
0   2016-03-29 21:27:25
1   2016-03-29 21:29:10
2   2016-03-29 21:28:21
3   2016-03-29 21:30:51
4   2016-03-29 21:31:54
Name: Part2EndTime, dtype: datetime64[ns]
Effektiv datainläsning med pandas

Nu kör vi en övning!

Effektiv datainläsning med pandas

Preparing Video For Download...