我有大量具有类似前缀df_
的DataFrame,看起来像:
df_1
df_x
df_ab
.
.
.
df_1a
df_2b
当然,我可以做final_df = pd.concat([df_1, df_x, df_ab, ... df_1a, df_2b], axis = 1)
问题是虽然前缀df_
将始终存在,但其余的数据帧名称不断变化,并且没有任何模式。因此,我必须不断更新pd.concat
中的数据帧列表以创建'final_df`,这很麻烦。
问题:无论如何要告诉python连接命名空间中的所有已定义的数据帧(仅)从df_
开始并创建final_df
或至少返回所有这些数据帧的列表,然后我可以手动输入pd.concat
?
你可以使用内置函数globals()
做这样的事情:
def concat_all(prefix='df_'):
dfs = [df for name, df in globals().items() if name.startswith(prefix)
and isinstance(df, pd.DataFrame)]
return pd.concat(dfs, axis=1)
逻辑:
prefix
开头的DataFrameconcat()
。例:
import pandas as pd
df_1 = pd.DataFrame([[0, 1], [2, 3]])
df_2 = pd.DataFrame([[4, 5], [6, 7]])
other_df = df_1.copy() * 2 # ignore this
s_1 = pd.Series([1, 2, 3, 4]) # and this
final_df = concat_all()
final_df
0 1 0 1
0 0 1 4 5
1 2 3 6 7
始终谨慎使用globals()
。它会为您提供整个模块命名空间的字典。
你需要globals()
而不是locals()
,因为字典正在函数中使用。 locals()
在使用时将无效。