如何测试数据帧最后一行中的特定值(使用-1)

Posted

技术标签:

【中文标题】如何测试数据帧最后一行中的特定值(使用-1)【英文标题】:How to test a specific value in last row of dataframe (using -1) 【发布时间】:2020-03-18 13:58:43 【问题描述】:

我有一个不断更新的数据框(一分钟一分钟),每分钟添加一个新行。我希望对特定列中数据框中的最后一个值进行条件测试。我一直在尝试使用 [-1:] 来指定最后一行和 ['columnname']。但是,这会返回一个系列,然后返回错误“系列的真值不明确......等等”。 如何引用特定列的最后一行中的值并进行条件测试?

    import pandas as pd
    data = 'D' : (1, 2, 3, 4, 5, 6),
            'O' : (4, 5, 3, 7, 9, 1),
            'OS' : (6, 1, 2, 0, 6, 4),
            'MAC' : (3, 6, 8, 6, 7, 9)
    df = pd.DataFrame(data)

然后测试最后一行和“MAC”列:

    if df[-1:]['MAC'] == 9:
        print('OK - It works now!')

返回一个'ValueError:一个系列的真值是不明确的......' 我尝试了许多使用 at、iat、get_value、values、loc、iloc、index 的公式, 最简单的公式:

    df[-1:]['MAC']

返回一个系列(包括索引和实际值):

    5    9
    Name: MAC, dtype: int64

当然,这是一个简单得愚蠢的问题...(就我而言)...谢谢

【问题讨论】:

【参考方案1】:

使用iloc:

>>> df.iloc[-1]['MAC']
9

【讨论】:

我认为这似乎是个好主意,但如果检查this 总是最好避免在熊猫中使用][【参考方案2】:

对于标量,可以将 Series 转换为 numpy 数组并选择最后一个值:

if df['MAC'].values[-1:] == 9:
    print('OK - It works now!')

或按位置选择,-1 表示最后一行,Index.get_loc 表示列的位置MAC

if df.iloc[-1, df.columns.get_loc('MAC')] == 9:
    print('OK - It works now!')

或者按标签选择DataFrame.loc - 但必须使用索引的最后一个值:

if df.loc[df.index[-1], 'MAC'] == 9:
    print('OK - It works now!')

【讨论】:

以上是关于如何测试数据帧最后一行中的特定值(使用-1)的主要内容,如果未能解决你的问题,请参考以下文章

软件测试中的性能测试包括哪些

使用 dplyr::mutate 对数据帧进行 Fisher 的测试统计

python读取文本文件,如何将每行最后一个特定字符替换?

随机播放数据框中的特定行[重复]

如何使用 loc[i,j] 根据索引值访问数据框中的特定值

如何使用正则表达式从熊猫数据框中的一行中的字符串中提取所有特定值?