我在带有Julian日期的pandas DF中有一个日期列。如何将这些Julian日期转换为mm-dd-yyyy格式。
示例数据
ORG CHAIN_NBR SEQ_NBR INT_STATUS BLOCK_CODE_1 DATA_BLOCK_CODE_1
0 523 1 0 A C 2012183
1 523 2 1 I A 2013025
2 521 3 1 A H 2007067
3 513 4 1 D H 2001046
4 513 5 1 8 I 2006075
我使用的是jd2gcal
功能,但它无效。我也试图编写这样的代码但没有用。
for i,row in amna.iterrows():
amna['DATE_BLOCK_CODE_1'] = datetime.datetime.strptime(row['DATE_BLOCK_CODE_1'], '%Y%j')
所需的输出:
ORG CHAIN_NBR SEQ_NBR INT_STATUS BLOCK_CODE_1 DATA_BLOCK_CODE_1
0 523 1 0 A C mm-dd-yyyy
1 523 2 1 I A mm-dd-yyyy
2 521 3 1 A H mm-dd-yyyy
3 513 4 1 D H mm-dd-yyyy
4 513 5 1 8 I mm-dd-yyyy
请帮助我。
答案 0 :(得分:2)
让我们试试这样的事情
df['New Date'] = (pd.to_datetime((df.DATA_BLOCK_CODE_1 // 1000).astype(str)) +
pd.to_timedelta(df.DATA_BLOCK_CODE_1 % 1000, unit='D'))
print(df)
ORG CHAIN_NBR SEQ_NBR INT_STATUS BLOCK_CODE_1 DATA_BLOCK_CODE_1 New Date
0 523 1 0 A C 2012183 2012-07-02
1 523 2 1 I A 2013025 2013-01-26
2 521 3 1 A H 2007067 2007-03-09
3 513 4 1 D H 2001046 2001-02-16
4 513 5 1 8 I 2006075 2006-03-17
答案 1 :(得分:2)
julian = df.DATA_BLOCK_CODE_1.str[4:].str.extract("([1-9][0-9]?[0-9]?)")
df["DATA_BLOCK_CODE_1"] = df.DATA_BLOCK_CODE_1.str[:4] + "-" + julian
df['DATA_BLOCK_CODE_1'] = pd.to_datetime(df['DATA_BLOCK_CODE_1'], format='%Y-%j')
正则表达式要求数字开始任何数字但是0.(我假设DATA_BLOCK_CODE_1
是字符串类型。)
答案 2 :(得分:0)
Pandas to_datetime function有一个origin
参数,可将日期转换为julian:
amna['Date'] = pd.to_datetime(amna['DATA_BLOCK_CODE_1'], unit='D', origin='julian')
print(df)
ORG CHAIN_NBR SEQ_NBR INT_STATUS BLOCK_CODE_1 DATA_BLOCK_CODE_1 Date
0 523 1 0 A C 2012183 2012-07-02
1 523 2 1 I A 2013025 2013-01-26
2 521 3 1 A H 2007067 2007-03-09
3 513 4 1 D H 2001046 2001-02-16
4 513 5 1 8 I 2006075 2006-03-17
请注意,您必须包含单位参数,并且必须将其设置为天('D')。