我现在有一组数据,共11个CSV文件。
数据总共20G左右。
现在我是每个文件赋值给一个变量,每个变量都是使用pandas的pd.read_csv()函数进行读取。
但是在运行过程中,会面临内核终止的问题。
然后,在服务器(内存90G,16核CPU)同样上述操作,依旧面临同样的问题。
请问各位,这种该如何处理?我想将这11个文件全部读取进行合并,进行后续的数据清洗和模型(XGBoodt)训练。
非常感谢!
我现在有一组数据,共11个CSV文件。
数据总共20G左右。
现在我是每个文件赋值给一个变量,每个变量都是使用pandas的pd.read_csv()函数进行读取。
但是在运行过程中,会面临内核终止的问题。
然后,在服务器(内存90G,16核CPU)同样上述操作,依旧面临同样的问题。
请问各位,这种该如何处理?我想将这11个文件全部读取进行合并,进行后续的数据清洗和模型(XGBoodt)训练。
非常感谢!
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题解答: 首先,面对大规模数据的读取,建议采用分段读取的方式,对数据进行拆分,多进程运行代码。可以利用Pandas的chunksize参数来将CSV文件分段读取,然后用for循环逐个处理每一块数据,最终将处理完的数据合并。 其次,建议对代码进行优化,尽可能减少资源占用,如避免使用不必要的循环和变量等。 最后,也可以考虑使用Dask等大数据处理框架,能够将数据分块处理并行执行。 案例代码:
import pandas as pd
import os
# 读取CSV文件路径
file_dir = './data'
files = os.listdir(file_dir)
csv_files = [os.path.join(file_dir, f) for f in files if f.endswith('.csv')]
# 分块读取和处理CSV文件
chunk_size = 100000
data_lst = []
for csv_file in csv_files:
for chunk in pd.read_csv(csv_file, chunksize=chunk_size):
# 处理该块数据
# ...
# 将处理结果加入列表
data_lst.append(chunk_result)
# 释放该文件的内存
del chunk
# 合并处理结果
final_data = pd.concat(data_lst, axis=0)
# 进一步处理和训练模型
# ...
这段代码首先读取CSV文件路径,然后使用pd.read_csv()函数分块读取每个CSV文件,对每一块数据进行处理并将结果加入列表,最终使用pd.concat()函数将处理结果合并。其中,循环结束后使用del语句释放内存空间,避免内存溢出问题。最后,可以对合并后的数据进行进一步的处理和模型训练。