使用R和Python操作大型数据文件

本文介绍了如何使用R的data.table包中的fread函数快速读取500万行数据,仅需10秒,同时展示了Python pandas处理大型Excel文件的方法。两种技术对比,突显了在大数据操作中的效率提升。
摘要由CSDN通过智能技术生成

最近有些大型数据文件,每个大概500万行,用R read.delim或read.csv函数大概一个要读10分钟,于是在网上搜索快速解决方案,整理如下

1. 读取大型文件

工具:R data.table软件包
函数:fread()

> library(data.table)
> dt1 <- fread("test.txt", sep = "\t",header = FALSE, na.strings = "NA") 

实测,500万行,13列,64Gb Linux系统中,读取大概10 s。

(对这个包感兴趣的可以搜索一下,frank、fread之类的函数命名方式真的很皮~)

对多个文件,简单循环一下:

library(dplyr)
library(data.table)
#读取目录里的.txt文件
a = list.files(pattern = ".txt")                                     
#读取第一个文件
ad1<-fread(a[1],header=T) 
#根据条件筛选数据
ad1<-filter(ad1,p_value<=1E-8) 
#提取文件名字
ss<-basename(a[1])
ss<-gsub('.txt','',ss)
#将文件名作为注释,添加到新的一列
ad1<-mutate(assoc.data,NAME=rep(ss,length(ad1[,1])))

#对其他文件循环,将筛选的数据循环加到ad1中保存,并在最后一列注释中,区分数据来自哪个文件
for (i in 2:length(a)){
   new.data = fread(a[i],header=T)
new.data<-filter(new.data,p_value<=1E-8) 
ss<-basename(a[i])
ss<-gsub('.txt','',ss)
new.data<-mutate(new.data,NAME=rep(ss,length(new.data[,1])))


   ad1 = rbind(ad1,new.data)
}
#将合并的文件保存
fwrite(ad1,"longlist.csv")

2. 将大型Excel文件切割成小文件

工具:Python pandas、numpy 模块
函数:read_excel

import pandas as pd
import numpy as np

i=0
for df in pd.read_excel(file_name, chunksize=50000):
    df.to_excel('/path/to/file_{:02d}.xlsx'.format(i), index=False)
    i += 1

这里chunksize是指,分割后的文件,每个包含的行数。

或者

chunksize = 50000
df = pd.read_excel(file_name)
for chunk in np.split(df, len(df) // chunksize):
    chunk.to_excel('/path/to/file_{:02d}.xlsx'.format(i), index=False)

(以上内容来自:https://stackoverflow.com/questions/41321082/pandas-split-large-excel-file)

或者

import numpy as np
np.array_split(df, 10)
#将df分为10等份

python确实更灵活些,有时间一定要多学学。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值