Python 已筛选数据帧的列结果为空序列

Python 已筛选数据帧的列结果为空序列,python,pandas,indexing,filter,conditional-statements,Python,Pandas,Indexing,Filter,Conditional Statements,我有这个代码片段,目的是用dataframe列的值填充子列表,但只使用与另一列中的某个值匹配的记录 最后一行是最相关的,但我添加了框架 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"

我有这个代码片段,目的是用dataframe列的值填充子列表,但只使用与另一列中的某个值匹配的记录

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

    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()
我的问题是子列表列表\u dict1[i]最后是空的。 它一定是最后一行(?),因为

以下是我已经测试过的一些内容的背景:

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

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

打印(df1[“header5”])
列存在;预期值(0或1)

print(df1.loc[df1[“header5”]==1,name\u 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(示例;仅用于上下文;没有问题)


问题可能在于如何围绕您给出的示例构建代码。下面的示例将代码的不同部分串在一起并起作用。您是否能够运行此示例

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
dict2
、或
列表未在事前正确定义,或事后过度写入


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

df1包含什么?如果我使用:import pandas as pd df1Data=[{'header5':1,'crit_abs':'one'},{'header5':0,'crit_abs':'zero'}]df1=pd.DataFrame(df1Data)print(df1.loc[df1['header5']==1,'crit_abs'])我得到:
0一个名字:crit_abs,dtype:object
(很抱歉,不知道如何格式化注释)谢谢,我编辑了我的问题,并为上下文添加了一个数据框(示例)!谢谢你,内森!我试过你的代码,它对我有效!因此,就在有问题的语句(我的If语句中的最后一个语句)之前,我打印了所有相关的对象(2个dict和DataFrame),它们都是正确的。然后我将
lists\u dict1[I]=…
(顺便说一句,这是一个子列表)更改为
lists\u dict1[I]。追加(…)
,这有助于使生成的列表不是空的,而是
['Series([],Name:header1,dtype:object)],['Series([],Name:header3,dtype:object'),]
。在末尾使用
.tolist()
,将导致一个空列表。过滤功能一定有问题。。。
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']}