我有一个索引由两个部分组成的数据框:id和日期时间,格式为:(2345,Timestamp('2009-10-21 17:00:00'))。该索引是使用以下命令创建的:
df=df.set_index(df['int'],append=True)
经过一些循环后,我想将索引分为两个单独的列: id (2345)和 datetime (2009-10-21 17:00: 00)。我知道我可以通过 reset_index()然后通过应用一些与字符串单元格相关的功能来做到这一点,例如:
df=df.reset_index()
df['index'] = df['index'].astype('str')
df[['id','datetime']] = df['index'].str.split(',',expand=True)
df['id'] = df['id'].str[1:].convert_objects(convert_numeric=True)
...等等。
是否有更简单的方法将索引分为 id 和 datetime ?
答案 0 :(得分:1)
一种有效的方法是提取元组系列的NumPy数组表示形式,将其转换为列表列表,然后馈入pd.DataFrame
构造函数中。然后,您可以加入原始数据框。
使用此方法,将保留数据类型。这是一个演示:
# set up dataframe
df = pd.DataFrame([[(2345, pd.Timestamp('2009-10-21 17:00:00')), 3],
[(2346, pd.Timestamp('2009-10-21 17:00:00')), 6]])
df = df.set_index(0)
# elevate of tuples to series
df = df.reset_index()
# split to list of lists, convert to dataframe and join
df = df.join(pd.DataFrame(df[0].values.tolist(), columns=['num', 'date']))\
.drop(0, axis=1)
print(df)
1 num date
0 3 2345 2009-10-21 17:00:00
1 6 2346 2009-10-21 17:00:00