python读取大量csv

本文介绍如何使用Python的pandas库批量处理近5万个CSV文件,解决读取时的问题,并通过添加前缀避免文件名以数字开头导致的读取错误。同时,讨论了如何将处理后的数据高效存储为HDF5格式,以供后续模型训练使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

需要对近5w个csv进行归并处理,使用pandas

文件夹和文件不能以数字作为开头

开头的话,python会加上各种/x,看了些教程,最后觉得不如改名,往前面添加同样的字母来解决问题。

#给文件夹和子文件夹加上ds
#作用:避免以数字开头,python无法读取

import os
import sys

path = "F:\xxx"
files = os.listdir(path)
newName = ""
for name in files:
    path1 = path +'\\'+ name;    # 第一层目录fsk_csv
    files1 = os.listdir(path1)

    for name1 in files1:
        path2 = path1 + '\\' + name1; # 第二层目录2FSK_0dB
        files2 = os.listdir(path2)
        for name2 in files2:         #读取第二层目录内文件并改名
            a = os.path.split(name2)
            os.rename(path2+'\\'+name2, path2+'\\ds'+ str(a[1]))

工作了1分钟全搞定。

读取csv

在这里插入图片描述
第一次用pandas的read_csv读取出现问题:读取时总把第一行作列属性,使我的数据少了一行。
pd.read_csv( csv_name_list[0],header=None),加上header=None可解决问题

import pandas as pd
import os

# 要拼接的文件夹及其完整路径,注不要包含中文
## 待读取批量csv的文件夹
read_path =  "F:\xxx"
# 修改当前工作目录
os.chdir(read_path)
# 将该文件夹下的所有文件名存入列表
csv_name_list = os.listdir()
# 读取第一个CSV文件并包含表头,用于后续的csv文件拼接
df = pd.read_csv( csv_name_list[0],header=None) #不把第一行作列属性
dfv = df.values

搞定
在这里插入图片描述

python字符串与数值转换

https://www.cnblogs.com/chenfulin5/p/7813791.html
这里主要用了int().

python中的hdf5

纠结了很久,发觉如果实时读取csv进python存储成变量速度还是太慢,意义不大。
加上这批数据是用来存储训练模型的数据,所以要求不用那么高,不如直接存成一个hdf5,提供给后面的兄弟训练模型。

由于我只需要dataset,hdf5中的group和其他概念我也暂时用不上,贴一个pyhton最简单的构建hdf5的方式

import h5py
f = h5py.File("mytestfile.hdf5", "w")
dsetx = f.create_dataset("X", data=ndarrayX)
dsety = f.create_dataset("Y", data=ndarrayY)
dsetz = f.create_dataset("Z", data=ndarrayZ)
f.close()

读取更简单,直接读:

    test_file = h5py.File(test_filename, 'r')
    X = test_file['X']
    Y = test_file['Y'][:]
    Z = test_file['Z'][:]
### 如何用Python高效读取大型CSV文件的最佳实践 当处理大型 CSV 文件时,Pandas 是一种常用的工具,但由于其默认行为会将整个文件加载到内存中,因此可能会导致性能瓶颈。以下是几种最佳实践方法来优化 Python 中的 CSV 文件读取过程。 #### 方法一:分块读取 通过设置 `chunksize` 参数可以实现分块读取功能,这样每次只加载一部分数据进入内存,从而减少整体内存消耗[^2]。 ```python import pandas as pd file_path = 'large_data.csv' chunk_size = 1000000 # 设置每一块的数据行数 reader = pd.read_csv(file_path, chunksize=chunk_size) for chunk in reader: process(chunk) # 对每一部分数据进行操作 ``` #### 方法二:仅读取必要的列 如果不需要所有的列,则可以通过指定 `usecols` 参数来选择特定的几列,这同样能够有效降低内存使用率[^1]。 ```python columns_to_read = ['column1', 'column2'] df = pd.read_csv('data.csv', usecols=columns_to_read) ``` #### 方法三:调整数据类型 对于某些数值型字段,默认情况下可能被识别为浮点数或者整数形式,但如果提前知道这些值的实际范围较小的话,那么就可以手动设定更节省空间的数据类型[^3]。 ```python dtype_dict = {'int_column': 'int8', 'float_column': 'float16'} df = pd.read_csv('data.csv', dtype=dtype_dict) ``` #### 方法四:利用压缩技术 如果原始CSV文件已经被压缩成gzip,bzip2等格式存储,在调用read_csv函数的时候可以直接支持解压并解析这样的文件,无需先将其转换回纯文本状态再导入系统内部,进一步提升了效率同时也减少了磁盘I/O开销[^2]。 ```python compressed_file = 'data.csv.gz' df = pd.read_csv(compressed_file, compression='infer') ``` 以上就是一些关于如何在Python环境下更加有效地去应对大规模结构化表格类资料的一些策略建议;当然除了上述提到的技术手段之外还有其他更多可能性等待探索发现!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值