python datetime 转换,日期可能包含空格

标签 python pandas date datetime

我有一个包含日期列的 .csv 文件,日期如下所示。

date
2016年 4月 1日   <-- there are whitespaces in thie row
...
2016年10月10日

日期格式为日文日期格式。我正在尝试将此列转换为“YYYY-MM-DD”,我正在使用的 python 代码如下。

data['date'] = [datetime.datetime.strptime(d, '%Y年%m月%d日').date() for d in data['date']]

有一个问题,当月/日为一位数时,.csv 中的日期列可能包含空格。当有空格时,我的代码无法正常工作。

有人解决吗?

最佳答案

如果存在矢量化解决方案,在 pandas 中最好避免列表理解,因为性能不支持 NaNs。

我认为需要replace by \s+ : 一个或多个空格 pandas.to_datetime转换为日期时间和最后的日期添加 date :

data['date'] = (pd.to_datetime(data['date'].str.replace('\s+', ''), format='%Y年%m月%d日')
                  .dt.date)

性能:

该图是用 perfplot 创建的:

df

def list_compr(df):
    df['date1'] = [datetime.datetime.strptime(d.replace(" ", ""), '%Y年%m月%d日').date() for d in df['date']]
    return df

def vector(df):
    df['date2'] = (pd.to_datetime(df['date'].str.replace('\s+', ''), format='%Y年%m月%d日').dt.date)
    return df

def make_df(n):
    df = pd.DataFrame({'date':['2016年 4月 1日','2016年10月10日']}) 
    df = pd.concat([df] * n, ignore_index=True)
    return df

perfplot.show(
    setup=make_df,
    kernels=[list_compr, vector],
    n_range=[2**k for k in range(2, 13)],
    logx=True,
    logy=True,
    equality_check=False,  # rows may appear in different order
    xlabel='len(df)')

关于python datetime 转换,日期可能包含空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345286/

相关文章:

Python pandas 将绝对值加到一个系列中的正数/负数

python - 如何从python客户端发送JSON对象到kafka

python - Pandas:使用另一个数据帧中的重复行更新多个数据帧列

javascript - 无法使用javascript以自动格式删除

javascript - 如何在javascript中将毫秒解析为日期

python - 使用 lxml 解析 html 部分模板

python - Pandas 比较下一行

python - Pandas 在 LOC 函数中使用 and 运算符

sql - postgresql中将日期转换为特定格式

python - 如何检查 Tensorflow LinearClassifier 的特征权重?