You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从单个纯文本文件按名称读取多个pandas DataFrame?

如何通过名称直接读取文件里的pandas DataFrame?

我有一个包含3个pandas DataFrame的输出文件,具体内容如下:

df1
A         R         N         D
0  0.033333  0.086667  0.014444  0.058889
1  0.093333  0.084444  0.011111  0.034444
2  0.093333  0.084444  0.011111  0.034444
df2
A         R         N         D
0  0.033333  0.008889  0.000000  0.055556
1  0.050000  0.016667  0.000000  0.058889
2  0.071111  0.018889  0.003333  0.027778
df3
A         R         N         D
0  0.016667  0.007778  0.000000  0.003333
1  0.027778  0.002222  0.003333  0.024444
2  0.006667  0.000000  0.000000  0.055556

我知道可以手动打开文件提取对应行后转为DataFrame,但想了解是否有内置方法可通过名称(如df1、df2)直接读取这些DataFrame。我是编程新手,希望得到通俗易懂的解答,谢谢。


先给你划重点:没有直接的内置方法,但有两种实用方案

这种打印出来的表格是给人看的「可视化输出」,不是pandas能直接识别的结构化格式,所以没有一键读取的内置函数,但下面两种方法能帮你轻松解决:

方案一:重新保存成序列化格式(推荐!新手友好,一步到位)

如果你能控制生成这个文件的代码,别再用print(df1)这种方式输出了,改用pandas专门的序列化工具保存,比如pickle(专门用来存Python对象的格式):

  1. 保存DataFrame时的代码:
import pandas as pd

# 假设你已经有了df1、df2、df3这三个DataFrame
# 把它们放进一个字典里,键就是你要的名称
df_collection = {"df1": df1, "df2": df2, "df3": df3}
# 保存成pickle文件
pd.to_pickle(df_collection, "my_dataframes.pkl")
  1. 读取的时候直接按名称调用:
# 加载整个字典
loaded_dfs = pd.read_pickle("my_dataframes.pkl")
# 直接通过键名获取对应的DataFrame
df1 = loaded_dfs["df1"]
df2 = loaded_dfs["df2"]
df3 = loaded_dfs["df3"]

这种方法的好处是:完全不用手动处理文本,能完整保留DataFrame的所有信息(比如索引、数据类型),后续读取超简单!

方案二:手动解析现有纯文本文件(适合没法重新生成文件的情况)

如果只能用现有的这个纯文本文件,那我们可以写点小代码把每个DataFrame的内容分开,再转成DataFrame:

import pandas as pd

# 第一步:读取整个文件的内容
with open("your_file.txt", "r") as file:
    full_content = file.read()

# 第二步:把内容按空行分割成每个DataFrame的部分
df_parts = full_content.split("\n\n")
# 用来存结果的字典
result_dict = {}

# 第三步:逐个处理每个DataFrame的部分
for part in df_parts:
    # 跳过空的部分
    if not part.strip():
        continue
    # 把每一行分开
    lines = part.split("\n")
    # 第一行就是DataFrame的名称(df1/df2/df3)
    df_name = lines[0].strip()
    # 剩下的行是表格内容,用空格分隔,转成DataFrame
    table_lines = "\n".join(lines[1:])
    # 用read_table读取空格分隔的表格
    df = pd.read_table(pd.io.common.StringIO(table_lines), sep="\s+")
    # 把结果放进字典
    result_dict[df_name] = df

# 现在就可以按名称调用啦!
df1 = result_dict["df1"]
df2 = result_dict["df2"]

注意:这个方法依赖于你的文件格式是固定的(比如每个DataFrame之间是空行分隔,名称单独占一行),如果文件格式有变化,可能需要调整分割的逻辑哦~

最后再啰嗦一句

为什么不能直接读取?因为print出来的表格是给人看的,没有统一的机器可读结构,而pickle这种序列化格式是专门为机器存储Python对象设计的,所以更可靠,新手优先选方案一哦!

内容的提问来源于stack exchange,提问作者ilam engl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:32:39