将 Pandas DataFrame 中的列类型从字符串转换为 Datetime 格式

2025 年 1 月 9 日 | 阅读 7 分钟

当我们使用 Python 中的 Pandas DataFrame 处理数据时,很常见的情况是会遇到时间序列数据。Pandas 是一个强大的工具,可以处理 Python 中的时间序列数据,并且我们可能需要将给定数据集中的字符串转换为 Datetime 格式。

在本教程中,我们将学习如何将 DataFrame 列中的字符串转换为 "dd/mm/yy" 格式的日期时间。如果日期不是必需的格式,用户将无法对时间序列执行任何基于时间的运算。为了解决这个问题,我们需要将日期转换为所需的日期时间格式。

在 Python 中转换数据类型格式的不同方法

在本节中,我们将讨论可以使用的方法来将 Pandas DataFrame 列的数据类型从字符串更改为日期时间。

方法 1:使用 pandas.to_datetime() 函数

pandas.to_datetime() 函数是一个多功能工具,可将 DataFrame 列中的字符串转换为日期时间格式。此函数会自动推断日期字符串的格式,或允许您使用 format 参数显式指定格式。

示例

输出

The data is: 
Date           Event                     Cost
0  12/05/2021    Music- Dance  15400
1  11/21/2018   Poetry- Songs   7000
2  01/12/2020  Theatre- Drama  25000

RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
0   Date    3 non-null      object 
1   Event   3 non-null      object
2   Cost    3 non-null      int64 
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes

在这里,我们在输出中可以看到 DataFrame 中“Date”列的数据类型是“object”,这意味着它是字符串。现在,我们将使用“pnd.to_datetime()”函数将数据类型转换为日期时间格式。

输出

The data is: 
Date           Event                     Cost
0  12/05/2021    Music- Dance  15400
1  11/21/2018   Poetry- Songs   7000
2  01/12/2020  Theatre- Drama  25000
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column  Non-Null Count  Dtype  
---  ------  --------------  -----         
0   Date    3 non-null      datetime64[ns] 
1   Event   3 non-null      object        
2   Cost    3 non-null      int64         
dtypes: datetime64[ns](1), int64(1), object(1)
memory usage: 200.0+ bytes

现在,我们可以看到 DataFrame 中“Data”列的格式已更改为日期时间格式。

方法 2:使用 DataFrame.astype() 函数。

DataFrame.astype() 函数可用于将 DataFrame 中的列转换为不同的数据类型,包括 datetime64 格式。但是,此方法不如 pandas.to_datetime() 灵活,因为它要求字符串采用可识别的日期时间格式。

示例

输出

The data is: 
Date           Event                     Cost
0  12/05/2021    Music- Dance  15400
1  11/21/2018   Poetry- Songs   7000
2  01/12/2020  Theatre- Drama  25000
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
0   Date    3 non-null      object 
1   Event   3 non-null      object
2   Cost    3 non-null      int64 
dtypes: int64(1), object(2)
memory usage: 200.0+ bytes

在这里,我们在输出中可以看到 DataFrame 中“Date”列的数据类型是“object”,这意味着它是字符串。现在,我们将使用“Data_Frame.astype()”函数将数据类型转换为日期时间格式。

输出

The data is: 
Date           Event   Cost
0  12/05/2021    Music- Dance  15400
1  11/21/2018   Poetry- Songs   7000
2  01/12/2020  Theatre- Drama  25000
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
#   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
0   Date    3 non-null      datetime64[ns] 
1   Event   3 non-null      object        
2   Cost    3 non-null      int64         
dtypes: datetime64[ns](1), int64(1), object(1)
memory usage: 200.0+ bytes

现在,我们可以看到通过使用 data_frame['Date'].astype('datetime64[ns]'),DataFrame 中“Data”列的格式已更改为日期时间格式。

方法 3

假设 DataFrame 列中有一个 "yymmdd" 格式的日期,我们需要将其从字符串转换为日期时间格式。

示例

输出

The data is: 
Date          Patient Number
0  210302           67000
1  210901           62000
2  210706           61900
3  210402           59000
4  210802           74000
5  210804           54050
6  210109           57650
7  210509           67300
8  210209           76600
Date              object 
Patient Number     int64
dtype: object

在这里,我们在输出中可以看到 DataFrame 中“Date”列的数据类型是“object”,这意味着它是字符串。现在,我们将使用“data_frame['Date'] = pnd.to_datetime(data_frame['Date'], format = '%y%m%d')”函数将数据类型转换为日期时间格式。

输出

The data is: 
Date         Patient Number
0  210302           67000
1  210901           62000
2  210706           61900
3  210402           59000
4  210802           74000
5  210804           54050
6  210109           57650
7  210509           67300
8  210209           76600
Date              datetime64[ns] 
Patient Number             int64
dtype: object

在上面的代码中,我们使用“pnd.to_datetime(data_frame['Date'], format = '%y%m%d')”函数将“Date”列的数据类型从“object”更改为“datetime64[ns]”。

方法 4

我们可以使用“pandas.to_datetime()”函数将多个列从“string”转换为“datetime”格式,即“YYYYMMDD”格式。

输出

The data is: 
Treatment_starting_Date   Patients Number     Treatment_ending_Date
0   20210612                54000                20210812
1   20210814                65000                20210614
2   20210316                71500                20210316
3   20210519                45000                20210119
4   20210221                98000                20210221
5   20210124                23000                20210724
6   20210929                12000                20210924
Treatment_starting_Date    object 
Patients Number             int64
Treatment_ending_Date      object 
dtype: object

在这里,我们在输出中可以看到 DataFrame 中“Date”列的数据类型是“object”,这意味着它是字符串。现在,我们将使用“pnd.to_datetime(data_frame[''], format = '%y%m%d')”函数将“Date”列的数据类型转换为日期时间格式。

输出

The data is: 
  Treatment_starting_Date  Patients Number Treatment_ending_Date
0                20210612            54000              20210812
1                20210814            65000              20210614
2                20210316            71500              20210316
3                20210519            45000              20210119
4                20210221            98000              20210221
5                20210124            23000              20210724
6                20210929            12000              20210924
 Treatment_starting_Date    datetime64[ns] 

Patients Number                     int64
 Treatment_ending_Date      datetime64[ns] 

dtype: object

在上面的输出中,我们可以看到“Treatment_starting_Date”和“Treatment_ending_Date”的数据类型已通过使用“pnd.to_datetime()”函数更改为日期时间格式。

结论

在本教程中,我们学习了在 Python 中将 Pandas DataFrame 的列类型从字符串转换为日期时间的各种方法。