我的目标是创建以下Pandas Dataframe (“date_time”列采用**' %Y-%m-%d %s:%m:%f% z'**格式):
batt_no date_time
3 4 2019-09-19 20:59:06+00:00
4 5 2019-09-19 23:44:07+00:00
5 6 2019-09-20 00:44:06+00:00
6 7 2019-09-20 01:14:06+00:00
但约束是我不想首先创建一个如下的 Dataframe ,然后将'date_time'列转换为上述格式。
batt_no date_time
3 4 1568926746
4 5 1568936647
5 6 1568940246
6 7 1568942046
我需要通过将两个值列表转换为所需的 Dataframe 来直接创建它。
以下是我尝试过的操作,但出现错误(请注意:'date_time'值采用纪元格式,我需要指定该格式,但已将其转换为'%Y-%m-%d %s:%m:%f%z'格式):
pd.DataFrame({'batt_volt':[4,5,6,7],
'date_time':[1568926746,1568936647,1568940246,1568942046].dt.strftime('%Y-%m-%d %s:%m:%f%z')}, index=[3,4,5,6])
有人能帮忙吗?
注意:我的问题与here的问题不同,那里的问题涉及到pandas datetime到unix timestamp的转换,我的问题不同是因为:
1.我的时间戳值与此处提到的任何类型都略有不同
1.我不需要转换任何时间戳值,而是创建一个具有所需时间戳值的完整 Dataframe --以一种特定的方式使用我在问题中明确提到的列表。
1.我已经清楚地说明了我尝试的过程,但需要一些修改,以运行没有错误,这在任何方面都是类似的问题,在上述链接。
所以,我的问题肯定不一样,我请求重新开启。
1条答案
按热度按时间r1wp621o1#
按照建议,我把解决方案放在评论中作为这里的答案。
pd.to_datetime
处理日期或日期列表,输入日期可以采用多种格式,包括epoch int。关键字unit
确保这些int被解释为自1970年1月1日以来的秒数,而不是ms、μs、ns...因此在创建DataFrame时使用它来直接创建日期列表是相当容易的。
由于需要具有特定格式的字符串列表(顺便说一句,在任何特定的上下文之外,我认为存储日期时间并将其转换为字符串仅用于I/O操作可能更好。但我不知道具体的上下文),我们可以对结果使用
.strftime
,当用一个列表调用to_datetime
时,它的类型是DatetimeIndex
。.strftime
也对那些起作用,然后应用于列表的所有日期时间。所以我们得到了一个所需格式的字符串列表。最后剩下的问题是时区。这里,没有完美的解决方案。因为一个简单的
int
,就像我们在开始的时候一样,没有时区。默认情况下,to_datetime
创建的日期时间没有时区(就像那些int一样)。所以它们相对于用户决定的任何时区。to_datetime
可以创建“时区感知日期时间”。但只能创建UTC。这是通过关键字argutc=True
完成的。这样我们就得到了时区感知日期时间,假设我们提供的整数是自1970-01-01 00:00:00+00:00以来的秒数