如何在列表理解中填充 pandas 数据框?

How to fill a pandas dataframe in a list comprehension?

我需要在列表理解中填充 pandas 数据框。

尽管满足条件的行已附加到数据框。

然而,最后,dataframe 是空的。

有办法解决吗?

在实际代码中,我正在进行许多其他计算。这是重新生成它的简化代码。

import pandas as pd

main_df = pd.DataFrame(columns=['a','b','c','d'])
main_df=main_df.append({'a':'a1', 'b':'b1','c':'c1', 'd':'d1'},ignore_index=True)
main_df=main_df.append({'a':'a2', 'b':'b2','c':'c2', 'd':'d2'},ignore_index=True)
main_df=main_df.append({'a':'a3', 'b':'b3','c':'c3', 'd':'d3'},ignore_index=True)
main_df=main_df.append({'a':'a4', 'b':'b4','c':'c4', 'd':'d4'},ignore_index=True)
print(main_df)

sub_df = pd.DataFrame()
df_columns = main_df.columns.values

def search_using_list_comprehension(row,sub_df,df_columns):
    if row[0]=='a1' or row[0]=='a2':
        dict= {a:b for a,b in zip(df_columns,row)}
        print('dict: ', dict)
        sub_df=sub_df.append(dict, ignore_index=True)
        print('sub_df.shape: ', sub_df.shape)

[search_using_list_comprehension(row,sub_df,df_columns) for row in main_df.values]

print(sub_df)
print(sub_df.shape)

问题是你用 sub_df = dp.DataFrame() 定义了一个空框架,然后你在函数参数和列表推导中分配相同的变量,你提供的总是相同的,空的 sub_df 作为参数 (始终为空)。您在函数内追加的那个仅对函数而言是本地的。另一个“问题”是使用 python 的 dict 变量作为用户定义。不要这样做。

以下是可以在您的代码中更改以使其正常工作的内容,但我强烈建议您不要这样做

import pandas as pd

df_columns = main_df.columns.values

sub_df = pd.DataFrame(columns=df_columns)

def search_using_list_comprehension(row):
    global sub_df
    if row[0]=='a1' or row[0]=='a2':
        my_dict= {a:b for a,b in zip(df_columns,row)}
        print('dict: ', my_dict)
        sub_df = sub_df.append(my_dict, ignore_index=True)
        print('sub_df.shape: ', sub_df)

[search_using_list_comprehension(row) for row in main_df.values]

print(sub_df)
print(sub_df.shape)