笔记:python分割csv超大文件并提取随机数据

来源:(3条消息) python实现大型CSV文件的切割(以NGSIM数据为例)_惜君如常的博客-CSDN博客_csv文件切割

从阿里云获得了一个用户行为的数据集,包含一亿多条数据。由于文件太大,想用常规方法读取时会出现内存溢出的情况,因此参考了原博的代码做了分割

import pandas as pd
from pathlib import Path

res_file_path = Path(r"UserBehavior.csv")  # 待分割文件路径
split_size = 1000000  # 子文件行数最大值
tar_dir = res_file_path.parent / ("split_" + res_file_path.name.split(".")[0])
if not tar_dir.exists():
    tar_dir.mkdir()
    print("创建文件夹\t" + str(tar_dir))
print("目标路径:\t" + str(tar_dir))
print("分割文件:\t" + str(res_file_path))
print("分割大小:\t" + "{:,}".format(split_size))
tmp = pd.read_csv(res_file_path, nrows=10)
columns = tmp.columns.to_list()
idx = 0

while len(tmp) > 0:
    start = 1 + (idx * split_size)
    tmp = pd.read_csv(res_file_path,
                      header=None,
                      names=columns,
                      skiprows=start,
                      nrows=split_size)
    if len(tmp) <= 0:
        break
    file_name = res_file_path.name.split(".")[0] + "_{}_{}".format(start, start + len(tmp)) + ".csv"
    file_path = tar_dir / file_name
    tmp.to_csv(file_path, index=False)
    idx += 1
    print(file_name + "\t保存成功")

只需要修改文件路径即可

在分割完成后,我得到了76个csv文件

笔记:python分割csv超大文件并提取随机数据_第1张图片

之后从每个文件中随机抽取数据,合并为我最终要拿来数据分析的文件

import random

new_f = open('./random_combine_UserBehavior.csv', 'w', encoding='UTF-8')
# 最终生产数据文件路径
for i in range(1, 77):
    x = i*1000000+1
    y = (i+1)*1000000+1
    file_name = 'UserBehavior_'+str(x)+'_'+str(y)+'.csv'
    old_f = open('./split_UserBehavior/'+str(file_name), 'r', encoding='UTF-8')
    n = 0
    
    resultList = random.sample(range(0, 1000000), 10000)        
        # 每个文件随机抽取10000条数据

    lines = old_f.readlines()
    for j in resultList:
        new_f.write(lines[j])

    old_f.close()
    print('第'+str(i)+'个文件已抽取完成')        # 抽取进度提示
new_f.close()

 笔记:python分割csv超大文件并提取随机数据_第2张图片

此外,为方便数据处理,用Excel把时间戳转换为时间

时间戳转正常日期

F1=(E1+8*3600)/86400+70*365+19 

正常日期转时间戳

E1=(F1-70*365-19)*86400-8*3600

笔记:python分割csv超大文件并提取随机数据_第3张图片

 要调整是否显示精确时间,在数字格式进行设置即可

笔记:python分割csv超大文件并提取随机数据_第4张图片

 

你可能感兴趣的:(python,开发语言)