python - 如何在python中 append 具有相同前缀的多个数据帧

标签 python pandas append

我有多个像这样的顺序数据框:

df1 = pd.DataFrame( [['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df2 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df3 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df4 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])

我需要创建一个 for 循环来 append 它们并获得一个新的数据框。 我尝试了下面的代码,但它不起作用,因为 python 将 df1 识别为字符串。

tempdf = df1
for i in range(2,4):
     tempdf = tempdf.append(("df"+str(i)))
     print(tempdf)

如何让 python 将它们识别为我创建的数据框对象?

最佳答案

首先,我要强调的是,必须这样做表明源数据帧的生成方式存在问题,您应该考虑修复该问题。

使用 Python,几乎可以做任何您想做的事情。使用这种权力是否可取完全是另一个问题。

在这种情况下,最安全的方法可能是使用 globals():

n_dataframes = 4
g = globals()
dataframes = [g[f'df{i}'] for i in range(1, n_dataframes + 1)]

result_df = pd.concat(dataframes)    
print(result_df)

输出:

   Name  Age
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14

您可以对结果进行进一步的处理,例如调用reset_index

另一种选择是使用 eval,它坚定地转向“你不应该这样做,除非你真的知道你在做什么”的领域,因为它允许执行任意代码:

dataframes = [eval(f'df{i}') for i in range(1, n_dataframes + 1)]

请注意,上面的代码使用了 f-strings,这是仅在 Python 3.6 中引入的语法。因此,如果您的 Python 版本低于该版本,请将 f'df{i}' 替换为 'df{}'.format(i)

关于python - 如何在python中 append 具有相同前缀的多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565758/

相关文章:

python - 如何将 pandas.to_datetime 与 "strange"字符串格式一起使用

python - 根据您拥有的日期和年份阅读多个excel

c++ - 有效地向字符串 append 或插入可变数量的空格

python - 为什么 + 运算符不更改列表而 .append() 会更改列表?

python - 如何使用 python 在内存中查找 00000000 就像 C 使用 while != 00000000 的方式

python - 如何在Python中的单个正则表达式中搜索正则表达式组中的特定字符串?

python - 为什么 Python 中遇到的段冲突错误比 Fortran 少?

python - 如果 python 中满足两列值的组合,则删除行

ios - append 字典,iOS,Swift

python - 定制 Pandas 宽到长