Python 将日分数和年转换为数据时间
我需要帮助,我似乎改变了主意Python 将日分数和年转换为数据时间,python,pandas,Python,Pandas,我需要帮助,我似乎改变了主意 Year DayFraction 1 1979 2.47 2 1979 2.83 3 1979 2.96 我需要的格式。我正在尝试2019/02/02 8:30:00的。如果我把这个题错了,请告诉我。我还是个新手 问题由以下人员解决(感谢大家的帮助): 对于np.arange中的i(len(Year)):对于np.arange中的i(len(Year)):temp=pd.to_datetime(Year[i],forma
Year DayFraction
1 1979 2.47
2 1979 2.83
3 1979 2.96
我需要的格式。我正在尝试2019/02/02 8:30:00的。如果我把这个题错了,请告诉我。我还是个新手
问题由以下人员解决(感谢大家的帮助):
对于np.arange中的i(len(Year)):对于np.arange中的i(len(Year)):temp=pd.to_datetime(Year[i],format='%Y')+pd.Timedelta(days=DayF[i]-2)testime=np.append([testime],temp)我不知道您的列是什么类型,但我假设它们是int/float
import pandas as pd
from datetime import timedelta
import numpy as np
#creating DataFrame
d = {'Year': [1979]*3, 'DayFraction': np.array([2.47, 2.83, 2.96])}
df = pd.DataFrame(data=d)
#converting types
df['Year'] = pd.Series([pd.Timestamp(str(i)) for i in df['Year']])
df['DayFraction'] = pd.Series([timedelta(days=i) for i in df['DayFraction']])
#adding the dates
df['NewFormat'] = df['Year'] + df['DayFraction']
#See result
print(df)
我希望有帮助。你可以试试这个
从日期时间导入时间增量
作为pd进口熊猫
数据={
“年份”:[1979、1979、1979],
“日分数”:[2.47,2.83,2.96]
}
df=pd.DataFrame(数据)
df['new_date']=(df
.apply(lambda x:pd.to_datetime(x['Year'],格式='%Y')+
时间增量(天=x['DayFraction']),
轴=1)
打印(df)
年份日分数新日期
0 1979 2.47 1979-01-03 11:16:48
1 1979 2.83 1979-01-03 19:55:12
2 1979 2.96 1979-01-03 23:02:24
如果出现TypeError:“float”对象不可许可
error
df['Year'] = pd.to_datetime(df['Year'], format='%Y')
df['DayFraction'] = df['DayFraction'].apply(lambda x: timedelta(days=x))
df['new_date'] = df['DayFraction'] + df['Year']
如果这些是列表
Year = [1979, 1979, 1979]
DayF = [2.47, 2.83, 2.96]
new_dates = []
for y, d in zip(Year, DayF):
new = pd.to_datetime(y, format='%Y') + pd.Timedelta(days=d)
new_dates.append(new)
print(new_dates)
[Timestamp('1979-01-03 11:16:48'), Timestamp('1979-01-03 19:55:12'), Timestamp('1979-01-03 23:02:24')]
这应该可以做到:
df[“Date”]=pd.to_timedelta(
df[“日分数”].sub(1),单位=“d”
).添加(
pd.to_datetime(df[“Year”],格式=“%Y”)
)
输出:
年份日分数日期
0 1979 2.47 1979-01-02 11:16:48
1 1979 2.83 1979-01-02 19:55:12
2 1979 2.96 1979-01-02 23:02:24
一个注意事项-因为您希望2.47
在一年的第二天-我们需要减去1
(除非您希望它是第三天-然后删除.sub(1)
),因为一年从1月1日开始,不是1月0日。您能分享其中一个示例的正确格式日期吗?DayFraction列的max
是什么?我不知道什么是“DayFraction”
。我不知道1979年的一年和2.47年的一天分数应该是多少。你可以通过坚持来帮助潜在的回答者。@ansev最大值是366.92084当应用此值时,它给我的错误是('DayF','发生在索引0')如果DayF是我的分数日数据,你是否忘记包括axis=1
?否我有此数据={'Year','DayFm'}df=pd.DataFrame(数据)def find\u new_date(行):“”“返回:一年的第一天+总秒数(diff)”“diff=24*60*60*row['DayFm']year=datetime(year=int(row['year']),month=1,day=1)返回年+timedelta(seconds=diff)df['new_date']=df.apply(find_new_date,axis=1)这是我的旧答案。我编辑了我的答案。你能再检查一下吗?data={Bsub['Year'],Bsub['DayFraction']}df=pd.DataFrame(data)df['new_date']=(df.apply(lambda x:pd.to_datetime(x['Year'],format='%Y')+timedelta(days=x['DayFraction']),axis=1))