修改导入:解析日期

使用 pandas 高效导入数据

Amany Mahfouz

Instructor

日期和时间数据

  • 日期和时间有各自的数据类型与内部表示
  • 日期时间值可转换为字符串表示
  • 有一套通用代码描述日期时间字符串格式
使用 pandas 高效导入数据

pandas 与日期时间

  • 日期时间列默认按对象(字符串)加载
  • parse_dates 指定列为日期时间(不是 dtype!)
  • parse_dates 可接受:
    • 要解析的列名或列号列表
    • 包含需合并解析列的列表
    • 字典:键为新列名,值为要合并解析的列列表
使用 pandas 高效导入数据

pandas 与日期时间

包含多种格式的日期时间列的表格

使用 pandas 高效导入数据

pandas 与日期时间

包含日期时间数据的表格,高亮显示标准格式的列

使用 pandas 高效导入数据

pandas 与日期时间

包含日期时间数据的表格,高亮显示仅日期列和仅时间列

使用 pandas 高效导入数据

pandas 与日期时间

包含日期时间数据的表格,高亮显示一种非常规的日期时间格式列

使用 pandas 高效导入数据

解析日期

# 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)
使用 pandas 高效导入数据

解析日期

# 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
使用 pandas 高效导入数据

解析日期

# 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]
使用 pandas 高效导入数据

解析日期

# 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]
使用 pandas 高效导入数据

非常规日期

  • parse_dates 不适用于非常规日期时间格式
  • parse_dates 不适用,先加载再用 pd.to_datetime()
  • to_datetime() 参数:
    • 待转换的数据框与列
    • format:日期时间格式的字符串表示
使用 pandas 高效导入数据

日期时间格式化

  • 用代码与字符描述日期时间字符串格式
  • 全列表参见 strftime.org
使用 pandas 高效导入数据

日期时间格式化

代码 含义 示例
%Y 年(4 位) 1999
%m 月(补零) 03
%d 日(补零) 01
%H 时(24 小时制) 21
%M 分(补零) 09
%S 秒(补零) 05
使用 pandas 高效导入数据

解析非常规日期

包含日期时间数据的表格,高亮显示一种非常规的日期时间格式列

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

survey_df["Part2EndTime"] = pd.to_datetime(survey_df["Part2EndTime"], format=format_string)
使用 pandas 高效导入数据

解析非常规日期

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]
使用 pandas 高效导入数据

Passons à la pratique !

使用 pandas 高效导入数据

Preparing Video For Download...