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

Python Pandas遇OSError[Errno22],需按type匹配填充txt文件内容

解决Pandas根据type列读取对应文件填充cal_str列的错误

错误原因

你代码里的df.type.to_string()会把整个type列转换成带索引和换行的字符串(比如输出0 1\n1 2\n2 3),拼接.txt后生成了0 1\n1 2\n2 3.txt这种包含换行和空格的无效文件名,这就是触发OSError的根源。

正确实现方式

下面提供两种可行的解决方案,都能实现仅给status为1的行,根据type值读取对应txt文件内容填充cal_str列的需求:

方法一:使用apply批量处理

import pandas as pd

pd.options.display.max_columns = None

data = {
  "type": [1, 2, 3],
  "duration": [50, 40, 45],
  "cal_str": [None,None,None],
  "status": [1,0,1]
}

df = pd.DataFrame(data)

# 定义读取文件的函数,返回文件第一行内容(去除首尾空白符)
def get_file_content(type_val):
    with open(f"{type_val}.txt", "r") as f:
        return f.readlines()[0].strip()

# 筛选status=1的行,对type列应用读取函数并赋值给cal_str
df.loc[df.status == 1, 'cal_str'] = df.loc[df.status == 1, 'type'].apply(get_file_content)

print(df)

方法二:遍历符合条件的行

import pandas as pd

pd.options.display.max_columns = None

data = {
  "type": [1, 2, 3],
  "duration": [50, 40, 45],
  "cal_str": [None,None,None],
  "status": [1,0,1]
}

df = pd.DataFrame(data)

# 遍历status为1的行的索引和type值,逐个读取文件填充
for idx, type_val in df.loc[df.status == 1, 'type'].items():
    with open(f"{type_val}.txt", "r") as f:
        df.loc[idx, 'cal_str'] = f.readlines()[0].strip()

print(df)

说明

  • 两种方法都会得到你预期的结果:cal_str列中status=1的行对应填充1.txt、3.txt的第一行内容,status=0的行保持None。
  • 使用with open语句可以自动关闭文件,比直接调用open()更安全,避免资源泄漏。
  • strip()方法用于去除文件内容首尾的换行符、空格等空白字符,可根据需求选择是否保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:03:35