gpt4 book ai didi

python - pandas:处理包含大量字符串的 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:15 25 4
gpt4 key购买 nike

我想读取和处理具有以下 2 列结构的大型 CSV 文件(data_file):

id params
1 '14':'blah blah','25':'more cool stuff'
2 '157':'yes, more stuff','15':'and even more'
3 '14':'blah blah','25':'more cool stuff'
4 '15':'different here'
5 '157':'yes, more stuff','15':'and even more'
6 '100':'exhausted'

此文件包含 30.000.000 行(磁盘上 5 Gb)。 (实际的字符串是用 UTF-8 编码的;为简单起见,我在这里用 ascii 编码)。请注意,第二列中的某些值是重复的。

我使用 pandas.read_csv() 阅读了这个:

df =  pandas.read_csv(open(data_file, 'rb'), delimiter='\t', 
usecols=['id', 'params'],dtype={'id':'u4', 'params':'str'})

读取文件后,数据框 df 使用 1.2 Gb 的 RAM。

到目前为止一切顺利。

现在是处理部分。我想要具有这种格式的 params 字符串列:

blah blah||more cool stuff
yes, more stuff||and even more
blah blah||more cool stuff
different here
yes, more stuff||and even more
exhausted

我写道:

def clean_keywords(x): 
return "||".join(x.split("'")[1:][::2])

df['params'] = df['params'].map(clean_keywords)

这段代码在给出正确结果的意义上起作用。但是:

  1. 执行 map 操作时使用了超过 6.8 Gb 的 RAM。
  2. 计算完成后,df(在 gc.collect() 之后)使用 5.5 Gb 的 RAM,尽管字符串在 params< 中计算 列比读取的那一列短。

有人可以解释一下并提出使用 pandas 执行上述操作的替代方法(我使用 python 3.4、pandas 0.16.2、win64)吗?

最佳答案

回答我自己的问题。

事实证明,pandas.read_csv() 很聪明。读取文件时,字符串是唯一的。但是当这些字符串被处理并存储在列中时,它们就不再是唯一的了。因此,RAM 使用量增加。为了避免这种情况,必须手动维护唯一性。我是这样做的:

unique_strings = {}

def clean_keywords(x):
s = "||".join(x.split("'")[1:][::2])
return unique_strings.setdefault(s, s)

df['params'] = df['params'].map(clean_keywords)

有了这个解决方案,RAM 最大。正如预期的那样,使用量仅为 2.8 Gb,并且在读取数据 (1.2 Gb) 后略低于初始 RAM 使用量。

关于python - pandas:处理包含大量字符串的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31344489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com