【发布时间】: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