Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将日文时间格式(H29.12.1)转换为YYYY-MM-DD格式?_Python_Python 3.x_Pandas_Datetime_Calendar - Fatal编程技术网

在Python中将日文时间格式(H29.12.1)转换为YYYY-MM-DD格式?

在Python中将日文时间格式(H29.12.1)转换为YYYY-MM-DD格式?,python,python-3.x,pandas,datetime,calendar,Python,Python 3.x,Pandas,Datetime,Calendar,我正在使用Python3+pandas处理一个日文csv文件 日文csv有一列表示时间,格式类似于H29.12.1。 我了解到该格式是日文格式,H29.12.1可以转换为2017-12-1(YYYY-MM-DD格式) 我的问题是,Python或pandas是否提供了将此日文时间列转换为YYYY-MM-DD格式的函数? 有了这些信息,我们可以读取日期,将年份设置为1989年,并添加N-1,其中N是年份编号(紧跟在H) 下面是一个示例函数: import datetime as dt def par

我正在使用Python3+pandas处理一个日文csv文件

日文csv有一列表示时间,格式类似于H29.12.1。 我了解到该格式是日文格式,H29.12.1可以转换为2017-12-1(YYYY-MM-DD格式)

我的问题是,Python或pandas是否提供了将此日文时间列转换为YYYY-MM-DD格式的函数?

有了这些信息,我们可以读取日期,将年份设置为1989年,并添加N-1,其中N是年份编号(紧跟在
H

下面是一个示例函数:

import datetime as dt
def parse_heisei(date_string, sep='.'):
    y, m, d = date_string.split(sep)
    return dt.date(year=1989 + int(y[1:]) - 1, month=int(m), day=int(d))
然后,您可以将此函数添加到数据框的日期列中

例如:

my_gregorian_dates = df.heisei_dates.apply(parse_hesei)

我相信您也可以找到一个自动执行此操作的库,但我认为标准datetime模块或pandas没有内置此功能。无论如何,这个函数编写起来非常简单。

我认为没有熊猫函数来处理日本的皇家日历,您可能需要编写自己的函数来转换日期

import re
import pandas as pd

def jp_date_to_yyyymmdd(dt):
    if re.match(r'\w\d+\.\d+.\d+', dt) is None:
        return None
    elif dt[0] == 'H':
        # HEISEI - 1989-01-08
        ymd = [int(x) for x in re.split(r'\.', dt[1:])]
        return pd.datetime(1988 + ymd[0], ymd[1], ymd[2])
    elif dt[1] == 'S':
        # SHOWA - 1926-12-25
        ymd = [int(x) for x in re.split(r'\.', dt[1:])]
        return pd.datetime(1925 + ymd[0], ymd[1], ymd[2])
    else:
        # You may add more conditions to handle older dates
        return None

df = pd.DataFrame({'jp_date': ['H29.12.1', 'H20.12.22', '']})
df.jp_date.apply(jp_date_to_yyyymmdd)

对于一个更专业的库来解析包含日文时代名称的日期,我发现这很有帮助

from japanera import Japanera
janera = Japanera()

# The library outputs dates corresponding to all eras starting with "H",
# as it's somewhat ambiguous which is being referred to
date_candidates = janera.strptime('H29.12.1', '%-a%-o.%m.%d')

# Use max(), with the assumption that the most recent era is the correct one
max(date_candidates)
# => datetime.datetime(2017, 12, 1, 0, 0)

# It can also parse the era names written in Japanese
# (no ambiguity here, so there is only one list item)
janera.strptime('平成29年12月1日', '%-E%-O年%m月%d日')
# => [datetime.datetime(2017, 12, 1, 0, 0)]