【问题标题】:need work-around for handling timestamps in dataframe and get datetime需要解决方法来处理数据框中的时间戳并获取日期时间
【发布时间】:2021-01-30 22:58:37
【问题描述】:

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

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

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

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

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

 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,返回时间戳:

这是我的 df 设置 'ts' 作为索引后的样子:

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

【问题讨论】:

  • 当您将索引设置为“ts”列时,您是将 ts 列留在数据框中还是删除 ts 列?将索引设置为 ts 列后,您的数据框是什么样的?
  • 我编辑了帖子,添加了一些图片。我不知道如何解决这里的整体任务。如果索引中的日期时间有效,并且我可以使索引列的转换有效,那么我认为我的问题已经解决了。如果没有,我仍然需要解决。无法理解为什么不能将日期时间存储在 df 列中。
  • 这里可能存在误解:dtype datetime64 的 pd.Series 的单个元素将属于 pd._libs.tslibs.timestamps.Timestamp 类。此外,如果您通过df = df.set_index('ts') 将列设置为索引,则'ts' 现在是索引,您不能将其称为列。这就是预期的行为。如果您还想将其保留为列,请使用df = df.set_index('ts', drop=False)
  • 请在带有.at 的特定数据点使用DataFrame.dtypes 而不是type。您将看到您的ts 列是datetime64[ns]。另外,删除不需要的循环。
  • dtypes 给 med 'ts' 是 datetime64[ns],关于基于这些数据的绘图,我并不接近。我究竟做错了什么?绘图仍然会返回一个像这篇文章中的最后一张图片一样的数字 (stackoverflow.com/questions/64065968/…) 我读到一些关于 datetime64 不是“可绘制”格式的信息,你知道这是不是真的?如何解决这个问题?

标签: python-3.x datetime timestamp


【解决方案1】:

我想我无法弄清楚你在问什么。给定一个 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

【讨论】:

  • 我同意这一切。 dtypes 显示 'ts' 列是 datetime64[ns],但绘图不起作用!可以直接绘制 datetime64 吗?如果是,如何?如果我将“ts”保留为一列,或者如果我将“ts”作为索引,它会返回相同的错误图。显示在这篇文章中 (stackoverflow.com/questions/64065968/…)
  • 你能解释一下剧情有什么问题吗?我看到一个图,其中 x 轴显示时间,y 轴显示值。这个情节的哪一部分是错误的?
  • 如果您查看数据框中的数据,如上图所示,df1,您会发现该图没有任何正确之处。 x 轴上的时间是“组成”秒,它没有查看我的实际时间戳。 y 轴上的值也不正确,但这可能是因为时间/日期的解释不正确?
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2014-05-22
  • 2012-06-13
  • 2011-03-20
  • 2013-03-10
相关资源
最近更新 更多