【发布时间】:2017-04-30 12:25:55
【问题描述】:
我一直在对 csv 文件使用 pandas 以从中获取一些值。我的数据如下所示:
"A",23.495,41.995,"this is a sentence with some words"
"B",52.243,0.118,"More text but contains WORD1"
"A",119.142,-58.289,"Also contains WORD1"
"B",423.2535,292.3958,"Doesn't contain anything of interest"
"C",12.413,18.494,"This string contains WORD2"
我有一个简单的脚本来读取 csv 并按组创建 WORD 的频率,因此输出如下:
group freqW1 freqW2
A 1 0
B 1 0
C 0 1
然后对这些值做一些其他的操作。现在的问题是我必须处理无法保存在内存中的非常大的 csv 文件(20+ GB)。我尝试了 pd.read_csv 中的 chunksize=x 选项,但因为 'TextFileReader' 对象不可下标,我无法对块进行必要的操作。
我怀疑有一些简单的方法可以遍历 csv 并做我想做的事。
我的代码是这样的:
df = pd.read_csv("csvfile.txt", sep=",", header = None,names=
["group","val1","val2","text"])
freq=Counter(df['group'])
word1=df[df["text"].str.contains("WORD1")].groupby("group").size()
word2=df[df["text"].str.contains("WORD2")].groupby("group").size()
df1 = pd.concat([pd.Series(freq),word1,word2], axis=1)
outfile = open("csv_out.txt","w", encoding='utf-8')
df1.to_csv(outfile, sep=",")
outfile.close()
【问题讨论】: