Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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_Datetime_Pandas_Multi Index_Datetimeindex - Fatal编程技术网

Python 创建隐藏在多索引中的年和月的日期时间

Python 创建隐藏在多索引中的年和月的日期时间,python,datetime,pandas,multi-index,datetimeindex,Python,Datetime,Pandas,Multi Index,Datetimeindex,我有一个数据框,其中年和月隐藏在多索引中。我想创建一个datetime索引作为附加列(或具有相同索引的单独系列) 我想把两个级别的索引作为字符串加在一起,然后按顺序读入pd.to\u datetime()。然而,加上这两个指数,我面临着问题。我可以将它们相加为整数,但如果我想将它们相加为字符串,我会遇到一些错误: In[193]: df.index.get_level_values('year').values.astype(str) Out[193]: array(['2010', '20

我有一个数据框,其中年和月隐藏在
多索引中。我想创建一个datetime索引作为附加列(或具有相同索引的单独系列)

我想把两个级别的索引作为字符串加在一起,然后按顺序读入
pd.to\u datetime()
。然而,加上这两个指数,我面临着问题。我可以将它们相加为整数,但如果我想将它们相加为字符串,我会遇到一些错误:

In[193]: df.index.get_level_values('year').values.astype(str)
Out[193]: 

array(['2010', '2010', '2010', ..., '2014', '2014', '2014'], 
      dtype='<U21')
In[194]: df.index.get_level_values('month').values.astype(str)
Out[194]: 

array(['1', '2', '3', ..., '10', '11', '12'], 
      dtype='<U21')
In[195]: df.index.get_level_values('month').values.astype(str) + df.index.get_level_values('year').values.astype(str)

TypeError: ufunc 'add' did not contain a loop with signature matching types
 dtype('<U21') dtype('<U21') dtype('<U21')
[193]中的
:df.index.get_level_value('year').values.astype(str)
Out[193]:
数组(['2010','2010','2010',…,'2014','2014','2014'],
dtype='我认为您可以使用,但首先需要多个
值:

y = df.index.get_level_values('year')
m = df.index.get_level_values('month')

df['Date'] = pd.to_datetime(y * 10000 + m * 100 + 1, format="%Y%m%d")
print (df)
                              price                 Date
                                foo       bar           
foo          bar year month                             
997182819645 11  2010 1      1.1900  3.000000 2010-01-01
                      2      2.2625  4.001769 2010-02-01
如果需要,则将列附加到
索引中

df['Date'] = pd.to_datetime(y * 10000 + m * 100 + 1, format="%Y%m%d")
df.set_index('Date', append=True, inplace=True)
print (df)
                                         price          
                                           foo       bar
foo          bar year month Date                        
997182819645 11  2010 1     2010-01-01  1.1900  3.000000
                      2     2010-02-01  2.2625  4.001769

另一个解决方案是创建新的
数据帧
,但最后需要:


你可以不调用
.values
df.index.get_level_values('month').astype(str)+df.index.get_level_values('year').astype(str)
@EdChum,它给了我
pandas.indexes.base.InvalidIndexError:重新编制索引只对唯一值的索引对象有效,这就是我尝试设置值的原因。
df['Date'] = pd.to_datetime(y * 10000 + m * 100 + 1, format="%Y%m%d")
df.set_index('Date', append=True, inplace=True)
print (df)
                                         price          
                                           foo       bar
foo          bar year month Date                        
997182819645 11  2010 1     2010-01-01  1.1900  3.000000
                      2     2010-02-01  2.2625  4.001769
y = df.index.get_level_values('year')
m = df.index.get_level_values('month')
d = pd.Index(len(df.index) * [1], name='day')
df1 = pd.DataFrame({'year':y, 'month':m, 'day':d}, index=df.index)

df['Date']  = pd.to_datetime(df1)
print (df)
                              price                 Date
                                foo       bar           
foo          bar year month                             
997182819645 11  2010 1      1.1900  3.000000 2010-01-01
                      2      2.2625  4.001769 2010-02-01