Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Datetime_Tuples - Fatal编程技术网

Python熊猫:转换<;类别';元组'&燃气轮机;迄今为止

Python熊猫:转换<;类别';元组'&燃气轮机;迄今为止,python,pandas,datetime,tuples,Python,Pandas,Datetime,Tuples,我有一个像这样的数据框 Sigma JulianDay 0 -9.05 2.451545e+06 1 -10.99 2.451545e+06 2 -8.42 2.451546e+06 3 -8.92 2.451547e+06 4 -10.79 2.451547e+06 5 -9.53 2.451548e+06 我想将列“JulianDay”转换为公历日期。为此,我使

我有一个像这样的数据框

         Sigma     JulianDay  
 0       -9.05  2.451545e+06 
 1      -10.99  2.451545e+06 
 2       -8.42  2.451546e+06 
 3       -8.92  2.451547e+06 
 4      -10.79  2.451547e+06
 5       -9.53  2.451548e+06
我想将列“JulianDay”转换为公历日期。为此,我使用了已定义的函数jd_to_date(jd)

结果是:

        Sigma     JulianDay       GregDate
0       -9.05  2.451545e+06   (2000, 1, 1)
1      -10.99  2.451545e+06   (2000, 1, 1) 
2       -8.42  2.451546e+06   (2000, 1, 2)
3       -8.92  2.451547e+06   (2000, 1, 3)
4      -10.79  2.451547e+06   (2000, 1, 3)
5       -9.53  2.451548e+06   (2000, 1, 4)
输出还告诉我,我正在处理一个对象类型:

Name: JulianDay, dtype: object
我现在的问题是,我想将GregDate列转换为datetime,以便能够将GregDate设置为索引。但是,当尝试创建时,dtype:object会给我带来麻烦

df['GregDate'] = pd.to_datetime(d)
我得到一个错误:

TypeError: <class 'tuple'> is not convertible to datetime
TypeError:无法转换为日期时间
那么,如何首先将“tuple”列转换为其他列,以便能够将其转换为datetime


谢谢

您可以使用
构造函数创建新的
数据框
,然后应用,重要的是列名

a = pd.DataFrame(df['GregDate'].values.tolist(), columns=['year','month','day'])
print (a)
   year  month  day
0  2000      1    1
1  2000      1    1
2  2000      1    2
3  2000      1    3
4  2000      1    3
5  2000      1    4

df.GregDate = pd.to_datetime(a)
print (df)
   Sigma  JulianDay   GregDate
0  -9.05  2451545.0 2000-01-01
1 -10.99  2451545.0 2000-01-01
2  -8.42  2451546.0 2000-01-02
3  -8.92  2451547.0 2000-01-03
4 -10.79  2451547.0 2000-01-03
5  -9.53  2451548.0 2000-01-04

或者,如果您不想创建另一个数据帧,可以使用以下命令

di = {}
di['GregDate'] = [(2000,1,1), (2000,1,2), (2000,1,3)]
df = pd.DataFrame(di)
df.head()

       # GregDate
# 0  (2000, 1, 1)
# 1  (2000, 1, 2)
# 2  (2000, 1, 3)

import datetime
def to_dt(tpl):
    tpl_dt = datetime.datetime.strptime('-'.join(str(x) for x in tpl), '%Y-%m-%d').strftime('%Y-%m-%d')
    return tpl_dt

df.loc[:, 'GregDate'] = df.GregDate.apply(func = to_dt)
df.head()
     # GregDate
# 0  2000-01-01
# 1  2000-01-02
# 2  2000-01-03

如果我的答案或其他答案有用,别忘了。谢谢,谢谢,这完全解决了问题。我试着把它转换成一本字典(它没有正常工作),但是有了“values.tolist”这正是我想要的是的,而且速度非常快。祝你好运,天气好!
di = {}
di['GregDate'] = [(2000,1,1), (2000,1,2), (2000,1,3)]
df = pd.DataFrame(di)
df.head()

       # GregDate
# 0  (2000, 1, 1)
# 1  (2000, 1, 2)
# 2  (2000, 1, 3)

import datetime
def to_dt(tpl):
    tpl_dt = datetime.datetime.strptime('-'.join(str(x) for x in tpl), '%Y-%m-%d').strftime('%Y-%m-%d')
    return tpl_dt

df.loc[:, 'GregDate'] = df.GregDate.apply(func = to_dt)
df.head()
     # GregDate
# 0  2000-01-01
# 1  2000-01-02
# 2  2000-01-03