如何在列表理解中填充 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)
我需要在列表理解中填充 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)