Sta*_*anO 5 python csv r bigdata
我有一个12 GB的CSV文件.我希望只从这些数据中提取一些列,然后编写一个新的CSV,希望我可以加载到R中进行分析.
问题是我在尝试在写入新CSV文件之前立即加载整个列表时出现内存错误.如何逐行解析数据然后创建CSV输出?
这是我到目前为止:
import pandas
colnames = ['contributor name', 'recipient name', 'recipient party', 'contributor cfscore', 'candidate cfscore', 'amount']
DATA = pandas.read_csv('pathname\filename.csv', names=colnames)
DATA.to_csv(''pathname\filename.csv', cols = colnames)
Run Code Online (Sandbox Code Playgroud)
在R中,您可以使用fread
流行的data.table包中的函数.
您可以使用该drop=
参数指定不读取的列 - 没有为它们分配内存,并且根本不读取它们.或者select=
您想要保留的列,如果更方便的话. fread
非常非常快速地读取csv文件.
如果您正在处理这么多数据,那么您可能还是想要熟悉data.table包.
或者,?read.csv.sql
从sqldf包中说它会
将文件读入R,用sql语句对其进行过滤.只有经过滤的部分由R处理,因此可以容纳大于R的文件.
这是一个例子:
write.csv(iris, "iris.csv", quote = FALSE, row.names = FALSE)
iris2 <- read.csv.sql("iris.csv",
sql="select * from file where Species = 'setosa' ")
Run Code Online (Sandbox Code Playgroud)
您可以使用该csv
模块逐行处理文件.像这样的东西可能会起作用:
import csv
infname = "csv.csv"
outfname = "csv_stripped.csv"
cols = ["col1", "col2", "col3"]
with open(infname) as inf, open(outfname, 'w+') as outf:
reader = csv.DictReader(inf)
writer = csv.DictWriter(outf, cols, extrasaction='ignore')
writer.writeheader()
for line in reader:
writer.writerow(line)
Run Code Online (Sandbox Code Playgroud)
以供参考:
归档时间: |
|
查看次数: |
1409 次 |
最近记录: |