如何使用“纪元日期”列表创建一个Pandas Dataframe ,格式为“%Y-%m-%d %s:%m:%f%z "?

np8igboo  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(172)

我的目标是创建以下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.我已经清楚地说明了我尝试的过程,但需要一些修改,以运行没有错误,这在任何方面都是类似的问题,在上述链接。
所以,我的问题肯定不一样,我请求重新开启。

r1wp621o

r1wp621o1#

按照建议,我把解决方案放在评论中作为这里的答案。

pd.DataFrame({'batt_volt':[4,5,6,7],               'date_time': pd.to_datetime([1568926746,1568936647,1568940246,1568942046], unit='s', utc=True).strftime('%Y-%m-%d %s:%m:%f%z')}, index=[3,4,5,6])

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。这是通过关键字arg utc=True完成的。这样我们就得到了时区感知日期时间,假设我们提供的整数是自1970-01-01 00:00:00+00:00以来的秒数

相关问题