首页 > 解决方案 > 过滤数据框的列导致空系列

问题描述

我有这个代码片段,目的是用数据框列的值填充子列表,但仅限于与另一列中的某个值匹配的记录。

最后一行是最相关的,但我添加了框架。

    for key, value in dict1.items():
    if key[0] + "rel" in dict2:
        i = int(key[0])
        name_col = df1.columns[int(value)]
        lists_dict1[i] = df1.loc[df1["header5"] == 1, name_col].tolist()

我的问题是子列表 lists_dict1[i] 最后是空的。 它必须是最后一行(?),因为...

这是我已经测试过的东西的一些背景:

i = int(key[0]) 单独打印,它可以工作(例如 0 和 2),这也表明 If 语句已激活

name_col = df1.columns[int(value)] 打印了这个,它给了我列的实际名称

print(df1["header5"]) 列存在;预期值(0 或 1)

print(df1.loc[df1["header5"] == 1, name_col].tolist()) 空列表 >> 为什么?

print(df1.loc[df1["header5"] == 1, "crit_abs"]) 空系列对象

dict1 {'0ber': '0', '1ber': '1', '2ber': '2', '3ber': '3'}

dict2 {'0rel': '0', '2rel': '2', '1abs': '1', '3abs': 'ja'}

df1(示例;仅用于上下文;没有问题)

df1 = {"header1": ["abc1", "abc2", "abc3"], "header2": [1, 1, 0], "header3": ["def5", "def8", "def2"], "header4": ["ja", "nein", "ja"], "header5": [1, 0, 1]}
df1 = pandas.DataFrame.from_dict(df1)

标签: pythonpandasindexingfilterconditional-statements

解决方案


问题可能在于您如何围绕您提供的示例构建代码。以下示例将代码的不同部分串在一起并起作用。你能让这个例子运行吗?

import pandas as pd

df1 = {"header1": ["abc1", "abc2", "abc3"], "header2": [1, 1, 0], "header3": ["def5", "def8", "def2"], "header4": ["ja", "nein", "ja"], "header5": [1, 0, 1]}
df1 = pd.DataFrame.from_dict(df1)

dict1 = {'0ber': '0', '1ber': '1', '2ber': '2', '3ber': '3'}
dict2 = {'0rel': '0', '2rel': '2', '1abs': '1', '3abs': 'ja'}

lists_dict1 = {}

for key, value in dict1.items():
    print('Key (' + key + ') Value (' + value + ')')
    if key[0] + "rel" in dict2:
        i = int(key[0])
        name_col = df1.columns[int(value)]
        print('Detected Valid Name Col = ' + name_col)
        lists_dict1[i] = df1.loc[df1["header5"] == 1, name_col].tolist()

print('Output Lists Dictionary: ' + str(lists_dict1))

当我运行它时,它返回:

Key (0ber) Value (0)
Detected Valid Name Col = header1
Key (1ber) Value (1)
Key (2ber) Value (2)
Detected Valid Name Col = header3
Key (3ber) Value (3)
Output Lists Dictionary: {0: ['abc1', 'abc3'], 2: ['def5', 'def2']}

如果我给出的示例对您有用,您可能需要查看如何在项目中构建代码。, df1, dict1, dict2orlists_dict1可能没有事先正确定义,或者它们在之后被覆盖。

如果我给出的示例不起作用,您使用的是什么版本的熊猫?


推荐阅读