如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?

Posted

技术标签:

【中文标题】如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?【英文标题】:How to get rid of word 'Timestamp' and tuple while appending datetime from csv? 【发布时间】:2022-01-19 03:02:33 【问题描述】:

我正在尝试从 csv 制作日期时间列表,以将我的结果与检测到的 LSTM 测试相匹配。

每当我使用循环提取日期时间和值时,我总是会得到带有日期时间的非字符串单词“时间戳”。

我的代码在这里:

m = [ 49,  50] #index of results which I have to match with datetime to extract all information

result_details = []
for index, rows in df.iterrows():
    if index in m:
        result_details.append([rows[0],
                                rows[1]])
print(result_details)

我的 csv:

           datetimeAt             value
0       2021-12-01 00:00:00       0.000
5       2021-12-01 01:00:00       0.000
10      2021-12-01 02:00:00       0.000
15      2021-12-01 03:00:00       0.000
20      2021-12-01 04:00:00       0.000
...             ...                ...
1149    2021-12-10 13:00:00       2.756
1154    2021-12-10 14:00:00       1.297
1159    2021-12-10 15:00:00       1.503
1164    2021-12-10 16:00:00       1.417
1169    2021-12-10 17:00:00       0.084

每当我追加时,我都会像这样:

[[Timestamp('2021-12-01 10:00:00'), 13.266044921875], 
[Timestamp('2021-12-01 09:00:00'), 9.5365595703125]]

如何获得如下输出? (只有日期和值,没有元组、字符串和单词)

[2021-12-01 10:00:00, 13.266044921875], 
[2021-12-01 09:00:00, 9.5365595703125]]

【问题讨论】:

【参考方案1】:

因为 'datetimeAt' 列是 timestamp 数据类型。 您可以将类型转换为字符串,然后它会起作用,如下所示:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

m = [49, 50, 60] #index of results which I have to match with datetime to extract all information
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(7), freq='h')

data = np.random.random(size=len(days))
df = pd.DataFrame('datetimeAt': days, 'value': data)

result_details = []
for index, rows in df.iterrows():
    if index in m:
        result_details.append([str(rows[0]),
                                rows[1]])
print(result_details)

注意:在处理数据帧时应尽量避免使用for loops,因为如果你有一个位表,它可能会变慢。相反,您可以使用非常有效的矢量化方法,例如:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

m = [49, 50] #index of results which I have to match with datetime to extract all information
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(7), freq='h')

data = np.random.random(size=len(days))
df = pd.DataFrame('datetimeAt': days, 'value': data)

df['datetimeAt'] = df['datetimeAt'].astype(str)
result_details = df.loc[m,:].values.tolist()
print(result_details)

输出:

[['2021-12-18 07:11:58.086250', 0.3699851325750202], 
['2021-12-18 08:11:58.086250', 0.6787871001450321]]

编辑:

测试它
pandas                    1.3.5
pandas                    0.23.4  
python 3.7 & 3.9

【讨论】:

嗨,Dariyoush,谢谢您的回复。让我检查一下。 当然,如果您遇到问题,请告诉我。 还是出现这个错误,是版本问题吗? KeyError:“不再支持将列表喜欢传递给带有任何缺失标签的 .loc 或 []。缺少以下标签:Int64Index([177, 178, 198, 200, 201], dtype='int64')跨度> 我尝试使用第二个。 是的,可能你的熊猫比我的还老。如果可以,请更新您的熊猫。

以上是关于如何在从 csv 附加日期时间时摆脱单词“时间戳”和元组?的主要内容,如果未能解决你的问题,请参考以下文章

用于将日期和时间列转换为 .csv 中的 unix 时间戳的 Bash 脚本

将日期插入 MySQL 数据库时如何忽略时间戳

如何将 Firestore 日期/时间戳转换为 JS Date()?

使用 SSIS 包将日期时间戳列添加到最终目标表

如何自定义 Pandas 日期时间戳@ x 轴

将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?