【问题标题】:How can I capture the data frames from a list in Python Pandas?如何从 Python Pandas 的列表中捕获数据帧?
【发布时间】:2021-05-04 10:27:24
【问题描述】:

我想在 Python Pandas 中将数据框与不同的列组合起来。

import pandas as pd 

first_df = pd.DataFrame({ 
    'a':np.random.randn(6),
    'b':np.random.choice( [5,7,np.nan], 6),
    'c':np.random.choice( ['panda','python','shark'], 6)})

second_df = pd.DataFrame({ 
    'a':np.random.randn(6),
    'b':np.random.choice( [5,7,np.nan], 6)})

third_df = pd.DataFrame({ 
    'a':np.random.randn(6)})

我有一个数据框列表

df_list = %who_ls DataFrame 
print(len(df_list))
df_list

但我不知道如何捕获数据框对象本身以便将它们组合起来:

pd.concat(df_list, axis=0, ignore_index=True)

【问题讨论】:

  • 你认为索引像df_list[0] 吗?
  • @jezrael 索引返回一个字符串,因为 df_list 是一个字符串列表。我想要数据框对象本身。
  • the_df_list = [globals()[df_name] for df_name in df_list].
  • @MustafaAydın 谢谢。它奏效了。

标签: python pandas list dataframe global


【解决方案1】:

我不确定你为什么使用 who_ls,如果你想组合数据框,只需像这样列出它们:

df = pd.concat([first_df, second_df, third_df])

编辑:我强烈建议你避免使用 who_ls 和 globals() 来做你想做的事,如果你在未来改变你的代码,有几件事可能会出错,而且它的可读性也不高。但它会像 cmets 中已经建议的那样工作。 但请考虑在加载/创建对象时列出对象以避免这种情况。

【讨论】:

  • 它可以工作,但我不想输入数据帧名称,因为我正在处理大量数据帧。
  • @Hamideh 您可以使用 globals() 从其名称中提取对象,但我认为有一种更简洁的方法可以做到这一点,大量数据帧来自哪里?也许你应该在那里抓住他们。
【解决方案2】:

您可以使用以下方法获取存储在内存中的所有 dfs 的列表:

df_list = [var for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)]
print(df_list)
>> ['first_df', 'second_df', 'third_df']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2019-12-21
    • 1970-01-01
    • 2014-08-31
    • 2018-06-04
    相关资源
    最近更新 更多