从列表创建熊猫系列会吃掉公羊

时间:2019-11-16 07:09:28

标签: python pandas memory-management google-colaboratory

我正在从txt文件中读取数字列表作为字符串。这不是一个大文件,只有1 GB。然后将数字转换为float并放入列表中。

with open(...) as f:
    lines = f.read()
mylist = [float(x) for x in lines if x not in ['[',']',',', ' ']]

列表的最终内容只是1.0格式的简单浮点数。但是,这占用了很多内存。我注意到如果将它们转换为int,它们不会占用太多空间,但是我需要它们是浮动的。

然后,当我尝试将其转换为熊猫系列时,整个会话崩溃。

mylist = pd.Series(mylist)

我使用的Google colab大约有25 GB的RAM和15 GB的GPU。我不敢相信只有1 GB的数据可以吃掉25 GB的ram,我一定做错了,但是我不知道应该怎么做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您是否尝试使用标准方法(带有自定义分隔符)打开此文件?

import pandas as pd
df  = pd.read_csv('you_file.txt', delimiter='\t')
df = df[(df['some_column'] != '[') & (df['some_column'] != ']')]
df = df[(df['some_column'] != ',') & (df['some_column'] != ' ')]

UPD : 也许您可以尝试使用python生成器,当我们关心RAM时,它是一个很棒的工具。

def open_file():
    for row in open(file_name, "r"):
        yield row
lines = open_file()