当前位置: 首页 > 面试题库 >

熊猫-将数据框多索引转换为日期时间对象

钱劲
2023-03-14
问题内容

考虑一个输入文件b.dat

string,date,number
a string,2/5/11 9:16am,1.0
a string,3/5/11 10:44pm,2.0
a string,4/22/11 12:07pm,3.0
a string,4/22/11 12:10pm,4.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,2.0
a string,5/2/11 2:02pm,3.0
a string,5/2/11 2:56pm,4.0
a string,5/2/11 3:00pm,5.0
a string,5/2/14 3:02pm,6.0
a string,5/2/14 3:18pm,7.0

我可以将每月总计进行分组,如下所示:

b=pd.read_csv('b.dat')
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
b.index=b['date']
bg=pd.groupby(b,by=[b.index.year,b.index.month])
bgs=bg.sum()

分组总数的索引如下:

bgs

            number
2011 2       1
     3       2
     4       8
     5      14
2014 5      13

bgs.index

MultiIndex(levels=[[2011, 2014], [2, 3, 4, 5]],
       labels=[[0, 0, 0, 0, 1], [0, 1, 2, 3, 3]])

我想将索引重新格式化为日期时间格式(天可以是一个月的第一天)。

我尝试了以下方法:

bgs.index = pd.to_datetime(bgs.index)

bgs.index = pd.DatetimeIndex(bgs.index)

都失败了。有人知道我该怎么做吗?


问题答案:

考虑按“ M”进行重采样,而不是按DatetimeIndex的属性分组:

In [11]: b.resample('M', how='sum').dropna()
Out[11]:
            number
date
2011-02-28       1
2011-03-31       2
2011-04-30       8
2011-05-31      14
2014-05-31      13

注意:如果您不想在这两个月之间,则必须删除NaN。



 类似资料:
  • 问题内容: 我有以下熊猫数据框: 我想将日期时间索引转换为数据框的列。我尝试过,但结果没有改变。任何想法? 问题答案: 需要分配输出或参数:

  • 我试图使用pandas.to_datetime()将只包含小时、分钟和秒的日期列转换为日期时间形式。但是,它会自动添加年份和日期。我还尝试使用pandas.to_datetime(df["time"],format = % H:% M:% S ")dt . time,数据类型仍然是object。有没有什么方法可以变成不带年份和日期的datetime格式?

  • 问题内容: 我有一个从以下代码获得的数据框,但无法将索引转换为dd / mm / yyyy 这是结果 我已经在stackoverflow上搜索了其他几个不同的变体,但是我找不到适合的组合。 它仍然打印出as 问题答案: 如果需要则是个问题,因为是in的默认显示格式。 如果需要通过索引: 不幸的是,这不起作用-docs:

  • 问题内容: 考虑到python中的pandas数据帧具有名为integer类型的列,我可以使用以下指令将其转换为格式。 因此,该列现在具有以下条目:。 将字符串恢复为整数时间戳值(代表从过去的秒数)的命令是什么? 我检查了但找不到转换实用程序,因此无法使用它。 此转换有实用程序吗? 问题答案: 您可以使用类型转换为int并将其除以以获取unix纪元开始的秒数。

  • 问题内容: 我有一个熊猫数据框,其中一列包含格式为日期的字符串 例如 目前该列的是。 如何将列值转换为Pandas日期格式? 问题答案: 使用类型

  • 问题内容: 我对熊猫有些陌生。我有一个熊猫数据框,它是1行乘23列。 我想将其转换为系列吗?我想知道最pythonic的方法是什么? 我试过了,但是抱怨。它不够聪明,无法意识到它仍然是数学上的“向量”。 谢谢! 问题答案: 它不够聪明,无法意识到它仍然是数学上的“向量”。 可以说它足够聪明,可以识别尺寸差异。:-) 我认为您可以做的最简单的事情是使用位置选择该行,这将为您提供一个Series,其列