我有以下数据帧:
import pandas as pd
df = pd.DataFrame({'name':['apple', 'banana', 'apple', 'mandarin', 'kiwi', 'kiwi'], 'val':[1,5,3,4,5,3]})
我想创建单独的数据帧,将水果名称传递给以下函数:
def split_all_fruits(df, fruit):
return df[df['name'] == fruit]
然后我可以通过调用函数创建数据帧:
apple_df = split_all_fruits(df, 'apple')
banana_df = split_all_fruits(df, 'banana')
#and other fruits
但是我想在for循环中创建数据帧,而不必每次为每个水果调用Function。但有没有可能创建for循环,一次从列表中为每个水果生成5个dataframe和dataframe名称? 像这样:
#name of dfs
name_of_dfs = ['apple_df', 'banana_df', 'mandarin_df', 'kiwi_df']
#fruit names in df
fruit_name = ['apple', 'banana', 'mandarin', 'kiwi']
#loop to create dfs, but i dont know how to assign list of names in name_of_dfs to respective fruit df
for fruit in fruit_name:
df_final = split_all_fruits(df,fruit)
print(df_final)
#it prints all dfs together, but not seperate df with name from list
谢谢!你知道吗
如果希望为每个水果生成一个数据帧,可以使用以下命令(注意,顺序将根据水果名称的字母顺序排列):
如果您需要按特定顺序排列的列表:
如果您希望能够通过名称访问它们,您可以使用字典理解并引用水果名称:
最后,如果您需要列出具体的变量,并知道这些变量应该提前:
虽然这可以通过
eval()
或globals()
实现,但更好的方法(更干净、更易于编程管理)是使用dict
,例如:访问方式,例如:
编辑
如果你真的想让变量名为
apple_df
等,一种方法是修改globals()
字典,例如:访问方式,例如:
尽管这被认为是不好的做法,但要小心!
如果您希望使用变量名而不是字典键(这不是一个好主意,但OP要求这样做),可以使用
exec()
。你知道吗现在您可以直接访问变量:
相关问题 更多 >
编程相关推荐