python-3.x - 需要解决方法来处理数据框中的时间戳并获取日期时间
问题描述
我最初发布了一个关于在同一个图中绘制不同日期时间采样的问题,存储在许多不同的数据框中。
我得到了帮助,了解我需要将时间列('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:
解决方案
我想我很难弄清楚你在问什么。给定一个 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
推荐阅读
- swift - 如何在 Xcode 10.1 中为文本字段和按钮设置约束
- javascript - 浏览器中的自动增量验证短信代码 (otp || 2fa)
- python - 字符串“NA”与 pandas na 类型冲突
- javascript - 需要帮助以使搜索功能在反应中起作用
- git - 在询问用户名和密码后使用 AWS CodeCommit 时出现 403 错误 (MacOS)
- java - java中的电子邮件通知(格式化电子邮件正文)
- php - 如何在laravel 5.7中删除3个关系表中的数据
- python - 如何读取某个位置最新且名称中包含特定单词的 excel 文件
- c++ - 有没有办法让“make_unique< T[ ] >”可以将参数转发给 T 的构造函数?
- angular - 如何为adal Login支持的应用编写端到端测试?