【问题标题】:How to get rid of word 'Timestamp' and tuple while appending datetime from csv?如何在从 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]]

【问题讨论】:

    标签: python python-3.x list csv datetime


    【解决方案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')跨度>
    • 我尝试使用第二个。
    • 是的,可能你的熊猫比我的还老。如果可以,请更新您的熊猫。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2023-03-31
    • 1970-01-01
    • 2021-09-03
    • 2013-06-16
    • 2021-08-31
    相关资源
    最近更新 更多