pandas 如何将具有多个数据类型的列的所有数据类型更改为日期?

wvmv3b1j  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(140)

如果数据类型如下所示,如何将列中字段的数据类型更改为日期类型:

<class 'datetime.datetime'>    296
<class 'str'>                  116
<class 'float'>                  8

我的目标是忽略空行,复制具有多个日期的行并将它们拆分,然后将datetime值转换为日期。
列的一小部分,用于说明数据的外观(第二行的"事件日期"列为空):
| 第1列|事件日期|
| - ------|- ------|
| 1个|2020年7月16日00时00分|
| 第二章||
| 三个|2022年3月31日、2018年11月26日、2028年1月31日|
我尝试了很多方法来实现这个功能,但都没有成功。我尝试过循环遍历行来转换每一行,但循环不是最佳选择。我尝试过拆分和分解包含多个日期的单元格,如下所示,但出现以下错误(使用dateutil.parser._parser.ParserError:未知字符串格式:2022年3月31日、2018年11月26日、2028年1月31日出现在位置3)。

df=auto_test_file.assign(dates=auto_test_file['Event Date'].str.split(',')).explode('dates')
pd.to_datetime(df['Event Date'])
s4n0splo

s4n0splo1#

你会爆炸

df=df.assign(dates=df['Event Date'].str.split(',')).explode('dates')
df
Out[93]: 
   Col1                          Event Date                dates
0     1                 2020-07-16 00:00:00  2020-07-16 00:00:00
1     2                                 NaN                  NaN
2     3  31/03/2022, 26/11/2018, 31/01/2028           31/03/2022
2     3  31/03/2022, 26/11/2018, 31/01/2028           26/11/2018
2     3  31/03/2022, 26/11/2018, 31/01/2028           31/01/2028

然后转换为日期时间

pd.to_datetime(df.dates)
Out[94]: 
0   2020-07-16
1          NaT
2   2022-03-31
2   2018-11-26
2   2028-01-31
Name: dates, dtype: datetime64[ns]
uxhixvfz

uxhixvfz2#

    • 建议代码**
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col1': [1, 2, 3],
    'Event': ['2020-07-16 00:00:00','' , '31/03/2022, 26/11/2018, 31/01/2028'],
})

#    Col1                               Event
# 0     1                 2020-07-16 00:00:00
# 1     2                                    
# 2     3  31/03/2022, 26/11/2018, 31/01/2028

# 1 - Split inside each Event row 
df['Event'] = df['Event'].apply(lambda r:r.split(','))
# 2 - Explode and the reindex
df = df.explode(column='Event').reset_index(drop=True)
# 3- Replace '' by NAN
df.replace(to_replace='', value= np.nan, inplace=True)
# 4 - Suppress rows with NAN
df.dropna(inplace=True)
# 5 - Convert to date
df['Event'] = pd.to_datetime(df['Event']).dt.date
    • 产出**
Col1       Event
0     1  2020-07-16
2     3  2022-03-31
3     3  2018-11-26
4     3  2028-01-31

相关问题