Python处理CSV文件:从Dict到DataFrame的完整指南

码头散步
码头散步
发布时间:2026-10-13 | 2人浏览过
原创

本文详解Python中CSV文件的读取与写入方法。通过鸢尾花数据集示例,演示如何将CSV直接转换为Dict列表或DataFrame对象。针对大数据量场景,提供逐条处理并写入的建议,以及使用writerows批量写入的技巧。此外,还涵盖从Zip压缩包中直接读取CSV、DataFrame导出CSV以及TXT文件转换等实用代码片段,帮助开发者高效处理结构化数据。

在数据分析流程中,频繁涉及从CSV格式文件存取数据,以及将处理结果输出至CSV文件的操作。为了简化工作流,直接将CSV数据读取为字典(dict)类型或DataFrame对象是高效且便捷的选择。下文将以经典的鸢尾花(Iris)数据集为例,展示具体的实现代码。

将CSV文件数据读取为字典(Dict)结构

相关实现代码

 # -*- coding: utf-8 -*-
import csv
with open('E:/iris.csv') as csvfile:
reader = csv.DictReader(csvfile, fieldnames=None) # fieldnames默认为None,如果所读csv文件没有表头,则需要指定
list_1 = [e for e in reader] # 每行数据作为一个dict存入链表中
csvfile.close()
print list_1[0]

运行后的单条数据输出示例

{'Petal.Length': '1.4', 'Sepal.Length': '5.1', 'Petal.Width': '0.2', 'Sepal.Width': '3.5', 'Species': 'setosa'}

若业务逻辑要求对每条数据进行独立处理,且数据规模庞大,建议采用逐条读取并处理的策略,随后再统一存入列表,以避免内存溢出或处理延迟。

 list_1 = list()
for e in reader:
 list_1.append(your_func(e)) # your_func为每条数据的处理函数 

将多个字典类型的数据写入CSV文件

写入操作的代码实现

 # 数据
data = [
{'Petal.Length': '1.4', 'Sepal.Length': '5.1', 'Petal.Width': '0.2', 'Sepal.Width': '3.5', 'Species': 'setosa'},
{'Petal.Length': '1.4', 'Sepal.Length': '4.9', 'Petal.Width': '0.2', 'Sepal.Width': '3', 'Species': 'setosa'},
{'Petal.Length': '1.3', 'Sepal.Length': '4.7', 'Petal.Width': '0.2', 'Sepal.Width': '3.2', 'Species': 'setosa'},
{'Petal.Length': '1.5', 'Sepal.Length': '4.6', 'Petal.Width': '0.2', 'Sepal.Width': '3.1', 'Species': 'setosa'}
]
# 表头
header = ['Petal.Length', 'Sepal.Length', 'Petal.Width', 'Sepal.Width', 'Species']
print len(data)
with open('E:/dst.csv', 'wb') as dstfile: #写入方式选择wb,否则有空行
 writer = csv.DictWriter(dstfile, fieldnames=header)
 writer.writeheader() # 写入表头
 writer.writerows(data) # 批量写入
dstfile.close()

上述示例展示了将数据整体写入CSV文件的方法。当数据量较大且需要实时监控写入进度时,推荐使用writerows函数进行批量写入,以提升效率。

将CSV文件读取为DataFrame对象

基础读取代码

 # 读取csv文件为DataFrame
import pandas as pd
dframe = pd.DataFrame.from_csv('E:/iris.csv')

此外,还可以采用一种间接方式实现读取:

import csv
import pandas as pd
with open('E:/iris.csv') as csvfile:
 reader = csv.DictReader(csvfile, fieldnames=None) # fieldnames默认为None,如果所读csv文件没有表头,则需要指定
 list_1 = [e for e in reader] # 每行数据作为一个dict存入链表中
csvfile.close()
dfrme = pd.DataFrame.from_records(list_1) 

从ZIP压缩文件中直接读取指定CSV文件为DataFrame

假设dst.zip压缩包内包含dst.csv及其他文件,本示例演示如何在不解压整个压缩包的情况下,直接读取其中的dst.csv文件并转换为DataFrame对象。

import pandas as pd
import zipfile
z_file = zipfile.ZipFile('E:/dst.zip')
dframe = pd.read_csv(z_file.open('dst.csv'))
z_file.close()
print dframe 

将DataFrame数据写入CSV文件

dfrme.to_csv('E:/dst.csv', index=False) # 不要每行的编号 

将TXT文件读取为DataFrame对象

import pandas as pd
# `path`为文件路径或文件句柄,`header`文件第一行是否是表头,`delimiter`每个字段的分隔符,`dtype`数据读入后的存储类型。
frame = pd.read_table(path, header=None, index_col=False, delimiter='\t', dtype=str)

以上内容涵盖了Python处理CSV文件的核心技巧,希望对您的学习与实践有所帮助。欢迎持续关注本站,获取更多技术更新与支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表