python - 如何在python中附加多个具有相同前缀的数据帧
问题描述
我有多个这样的顺序数据框:
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 循环来附加它们并获取一个新的数据框。我尝试了下面的代码,但它不起作用,因为 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 - 仅打印第二行
- c - 结构数组 - sizeof 返回意外结果
- javascript - Javascript 在 PHP 函数中不起作用
- python - 如何使这个读取电子邮件的python2函数在python3中运行?
- django - “服务”对象不是可迭代的 Django
- asp.net-mvc - MapMvcAttributeRoutes 起始页
- angular - 在 cPanel 上部署 Angular webApp
- python - 在字符串python中查找未知模式
- jquery - 使用 Css 或 Jquery 对 Bootstrap 卡的叠加效果/切换效果
- python - Pandas 索引和列创建