Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 将日分数和年转换为数据时间_Python_Pandas - Fatal编程技术网

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))