Python处理CSV文件:从Dict到DataFrame的完整指南
本文详解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文件的核心技巧,希望对您的学习与实践有所帮助。欢迎持续关注本站,获取更多技术更新与支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









