如何在从 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 脚本