【问题标题】:Retrieve a value as a datetime with pandas (selected by filtering by rows / columns)使用 pandas 检索一个值作为日期时间(通过按行/列过滤来选择)
【发布时间】:2021-06-06 11:34:05
【问题描述】:

我需要将日期时间保存到 Excel 文件中,以便在再次读取 Excel 文件后,我可以将它们与其他日期时间进行比较。这是一个最小的例子:

import pandas as pd, datetime
df = pd.DataFrame({'A': [1, 2],
                   'B': [datetime.datetime(2000,1,1,1,2,3), 
                         datetime.datetime(2010,1,1,1,2,3)]})
df.to_excel('test.xlsx')                # save to Excel file
df2 = pd.read_excel('test.xlsx')        # load from Excel file
print(df2)
t = df2.loc[df['A'] == 2, 'B']         # select the value in col B by filtering rows
L = [t, datetime.datetime(2020,1,1,1,2,3)]
print(sorted(L))

这会产生以下错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

t 的值作为日期时间检索的标准pandas 方法是什么?

【问题讨论】:

    标签: python excel pandas dataframe datetime


    【解决方案1】:

    你需要一个元素系列的标量:

    #select first value if always matched at least one row
    t = df2.loc[df['A'] == 2, 'B'].iat[0]
    
    #general solution for return default value if no match
    t = next(iter(df2.loc[df['A'] == 2, 'B']), 'no match')
    

    编辑:如果通过A 列由DataFrame.set_index 创建索引并且始终匹配此处的值2 和列B 可能使用DataFrame.loc 按索引nand 列名称进行选择:

    df = df2.set_index('A')
    t = df.loc[2, 'B']
    

    【讨论】:

    • 谢谢@jezrael。 API中没有更短的方法来访问通过行过滤获得的位置的值吗? df.value[df['A'] == 2, 'B'] 之类的东西?在这里必须.loc[...].iat[...] 似乎异常复杂,你不这么认为吗?
    • PS @jezrael:我的意思是不改变索引(我可以过滤除索引之外的其他列)
    • 非常感谢@jezrael。由于您是顶级熊猫大师之一(熊猫开发者?),您可能对这个有一个想法:stackoverflow.com/questions/66421693/… 我开始了赏金计划,有一些想法真的很棒!以防万一,谢谢:)
    • @Basj - 现在不知道其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 2015-06-22
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多