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

如何在Python中从首元素为列名的列表创建单列DataFrame

解决单列DataFrame创建时的TypeError问题

你的报错原因很明确:pd.DataFrame.from_records的columns参数要求传入可迭代的集合(比如列表、元组),但你直接传了单个字符串'sv_m1',pandas无法将其识别为列名集合,所以抛出了TypeError。

另外先提个小细节:你的CSV数据分隔符是空格,不是代码里写的逗号,这个先修正,否则读取的列数据会完全错误。

基础修正方案

先给你解决报错的最简修正代码:

import csv
import pandas as pd

# 注意分隔符改成空格,适配你的数据格式
input_file = open('df_seg_sample.csv', 'r')
c_reader = csv.reader(input_file, delimiter=' ')

# 提取第1列数据(索引从0开始)
column = [x[1] for x in c_reader]
label = column[0]
column_values = column[1:]

# 核心修改:把列名放到列表里传给columns参数
df_column = pd.DataFrame(data=column_values, columns=[label])

# 可选:将列值转换为数值类型(默认是字符串)
df_column[label] = pd.to_numeric(df_column[label])

input_file.close()

针对超大文件的内存优化方案

考虑到你提到原数据量极大,直接把整列数据加载到内存可能撑不住,这里给你一个逐行读取+分批写入的优化版本,避免内存堆积:

import csv
import pandas as pd

def process_single_column(col_index, input_path, output_path, batch_size=10000):
    """
    逐列处理超大CSV文件,分批写入单列DataFrame到新文件
    :param col_index: 要提取的列索引(从0开始)
    :param input_path: 原始CSV路径
    :param output_path: 输出单列CSV路径
    :param batch_size: 每批处理的行数,可根据内存调整
    """
    column_data = []
    label = None
    with open(input_path, 'r') as input_file:
        c_reader = csv.reader(input_file, delimiter=' ')
        for idx, row in enumerate(c_reader):
            if idx == 0:
                # 提取列名
                label = row[col_index]
            else:
                # 提前转换数值类型,减少内存占用(如果是数值的话)
                try:
                    val = float(row[col_index])
                    column_data.append(val)
                except ValueError:
                    # 非数值类型直接保留原字符串
                    column_data.append(row[col_index])
            
            # 达到批处理阈值就写入文件,清空临时列表
            if len(column_data) >= batch_size and idx != 0:
                df_batch = pd.DataFrame(column_data, columns=[label])
                # 第一次写入带表头,后续追加不带表头
                write_mode = 'w' if idx == batch_size else 'a'
                df_batch.to_csv(output_path, mode=write_mode, header=(write_mode=='w'), index=False)
                column_data = []
        
        # 处理最后一批剩余的数据
        if column_data:
            df_batch = pd.DataFrame(column_data, columns=[label])
            df_batch.to_csv(output_path, mode='a', header=False, index=False)

# 示例:提取第1列(对应sv_m1)并写入新文件
process_single_column(1, 'df_seg_sample.csv', 'sv_m1_output.csv')

这个方案的优势在于:

  • 用with语句自动管理文件,避免资源泄漏
  • 逐行处理数据,不会一次性加载整个文件到内存
  • 分批写入磁盘,内存占用始终保持在batch_size对应的量级
  • 提前转换数据类型,避免存储大量冗余字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:06