首页 > 解决方案 > 需要解决方法来处理数据框中的时间戳并获取日期时间

问题描述

我最初发布了一个关于在同一个图中绘制不同日期时间采样的问题,存储在许多不同的数据框中。

我得到了帮助,了解我需要将时间列('ts')转换为日期时间。我为此苦苦挣扎,仍然搞砸了情节。原来我的日期时间转换不起作用,这是众所周知的事情,如此所述。

数据框无法将日期时间存储在列中(为什么??),它将其转换回 pandas._libs.tslibs.timestamps.Timestamp。

我需要找出解决这个问题的最佳方法,以便能够绘制大型数据集。

在上面的帖子中,说明数据帧索引可以存储日期时间格式,但是当我将列设置为索引并尝试循环时,我得到关键错误。

 In[]: df.index.name 
 Out[]: ‘ts’

但是当我尝试时:

for column in df.columns[1:]:
    df['ts'] = pd.to_datetime(df['ts'])

我得到 KeyError: 'ts'

我在这里做错了吗?有谁知道日期时间是否正确存储在索引中?

但是,我仍然想询问有关此问题的最佳解决方法。

我的底线是想在同一个图中正确地绘制几个数据框。我有很多大型数据集,在尝试时,我使用了两个简化的数据框,见下文:

print(df1)
                        ts  value
0  2019-10-18 08:13:26.702     14
1  2019-10-18 08:13:26.765     10
2  2019-10-18 08:13:26.790      5
3  2019-10-18 08:13:26.889      6
4  2019-10-18 08:13:26.901      8
5  2019-10-18 08:13:27.083     33
6  2019-10-18 08:13:27.098     21
7  2019-10-18 08:13:27.101     11
8  2019-10-18 08:13:27.129     22
9  2019-10-18 08:13:27.159     29
10 2019-10-18 08:13:27.188      7
11 2019-10-18 08:13:27.212     20
12 2019-10-18 08:13:27.228     24
13 2019-10-18 08:13:27.246     30
14 2019-10-18 08:13:27.395     34
15 2019-10-18 08:23:26.375     40
16 2019-10-18 08:23:26.527     49
17 2019-10-18 08:23:26.725     48

print(df2)
                       ts  value
0 2019-10-18 08:23:26.375     27
1 2019-10-18 08:23:26.427     17
2 2019-10-18 08:23:26.437      4
3 2019-10-18 08:23:26.444      2
4 2019-10-18 08:23:26.527     39
5 2019-10-18 08:23:26.575     25
6 2019-10-18 08:23:26.662      6
7 2019-10-18 08:23:26.676     14
8 2019-10-18 08:23:26.718     11
9 2019-10-18 08:23:26.725     13

实现我正在寻找的结果的最佳方法是什么?

我尝试将“ts”列转换为数组和列表,但似乎没有什么能让我更接近将数据集绘制在一起的最终工作结果。转换为数组中的日期时间给我 numpy.datetime64,转换为列表中的日期时间给我 pandas._libs.tslibs.timestamps.Timestamp。

非常感谢任何帮助,因为这真的让我发疯。

如果需要,我从 avro 文件中读取的原始“ts”值的类型为:

 '2019-10-18T08:13:27.098000'

跑步:

df['ts'] = pd.to_datetime(df['ts'])

返回

'2019-10-18 08:13:27.098'  (pandas._libs.tslibs.timestamps.Timestamp)

编辑 1

有关我的步骤的更多信息,这是我阅读 avro 文件后的 df:

在此处输入图像描述

这是我第一次尝试将格式转换为日期时间后的 df,返回时间戳:

在此处输入图像描述

这是将“ts”设置为索引后我的 df 的样子:

在此处输入图像描述

然后我尝试在索引中将时间戳转换为日期时间,我得到 keyError:

在此处输入图像描述

标签: python-3.xdatetimetimestamp

解决方案


我想我很难弄清楚你在问什么。给定一个 df 的形式:

    ts  value
0   2019-10-18 08:13:26.702 14
1   2019-10-18 08:13:26.765 10
2   2019-10-18 08:13:26.790 5
3   2019-10-18 08:13:26.889 6
4   2019-10-18 08:13:26.901 8
5   2019-10-18 08:13:27.083 33

我可以执行以下操作将 ts 列转换为 pd.datetime 变量并使 ts 列成为索引:

df['ts'] = pd.to_datetime(df['ts'])
df = df.set_index(['ts'], drop=True)

产生形式的df

                       value
       ts   
2019-10-18 08:13:26.702 14
2019-10-18 08:13:26.765 10
2019-10-18 08:13:26.790 5
2019-10-18 08:13:26.889 6
2019-10-18 08:13:26.901 8

然后我可以打印索引的值,或者为此对我想要的索引使用任何迭代。以下仅给出前 5 个值。

for i in range(5):
    print(df.iloc[i].name)

2019-10-18 08:13:26.702000
2019-10-18 08:13:26.765000
2019-10-18 08:13:26.790000
2019-10-18 08:13:26.889000
2019-10-18 08:13:26.901000

推荐阅读