Python 如何在Google Colab中读取大型csv文件?

Python 如何在Google Colab中读取大型csv文件?,python,pandas,csv,google-colaboratory,Python,Pandas,Csv,Google Colaboratory,因此,我的csv文件存储在本地google colab目录中。它的大小约为3.31GB。当我运行以下代码行时: truthdata = pd.read_csv("out.csv",header=0) 会话内存不足,将重新连接。 请让我知道如何将这个大型csv文件读入熊猫数据框。 谢谢 google collab的资源限制为12GB内存。你可以做的事情: 在pd.read\u csvf函数中使用usecols或nrows参数来限制要读取的列和行的数量。那会减少内存 按块读取文件,并使用以下函数减

因此,我的csv文件存储在本地google colab目录中。它的大小约为3.31GB。当我运行以下代码行时:

truthdata = pd.read_csv("out.csv",header=0)
会话内存不足,将重新连接。 请让我知道如何将这个大型csv文件读入熊猫数据框。
谢谢

google collab的资源限制为12GB内存。你可以做的事情:

在pd.read\u csvf函数中使用usecols或nrows参数来限制要读取的列和行的数量。那会减少内存

按块读取文件,并使用以下函数减少每个块的内存。之后,康卡警长去了春克斯

代码不是我的,我从下面的链接复制了它,然后调整了它


这取决于你到底想做什么。通常有一个名为chunksize的参数,允许您在数据块上迭代。这通常是有效处理大文件的方法。

您可以尝试分块处理:例如在内存中加载10%,进行一些筛选等。在内存中加载下一个块等。这篇文章可能会有所帮助:。特别提供了一个使用pandas的解决方案:@WillemVanOnsem有没有办法在Colab上实现这一点?谢谢。@Adrian:谢谢你的链接,我也许能从中找到一个解决方案。这个csv文件是一个测试数据。我有一个训练有素的分类程序,我想对csv文件的每一行进行预测。您可以加载任意多行的块,然后。applypredict,axis=1在每一行上运行预测程序。
def reduce_mem_usage(df, int_cast=True, obj_to_category=False, subset=None):
    """
    Iterate through all the columns of a dataframe and modify the data type to reduce memory usage.
    :param df: dataframe to reduce (pd.DataFrame)
    :param int_cast: indicate if columns should be tried to be casted to int (bool)
    :param obj_to_category: convert non-datetime related objects to category dtype (bool)
    :param subset: subset of columns to analyse (list)
    :return: dataset with the column dtypes adjusted (pd.DataFrame)
    """
    start_mem = df.memory_usage().sum() / 1024 ** 2;
    gc.collect()
    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))

    cols = subset if subset is not None else df.columns.tolist()

    for col in tqdm(cols):
        col_type = df[col].dtype

        if col_type != object and col_type.name != 'category' and 'datetime' not in col_type.name:
            c_min = df[col].min()
            c_max = df[col].max()

            # test if column can be converted to an integer
            treat_as_int = str(col_type)[:3] == 'int'
            if int_cast and not treat_as_int:
                treat_as_int = check_if_integer(df[col])

            if treat_as_int:
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.uint8).min and c_max < np.iinfo(np.uint8).max:
                    df[col] = df[col].astype(np.uint8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.uint16).min and c_max < np.iinfo(np.uint16).max:
                    df[col] = df[col].astype(np.uint16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.uint32).min and c_max < np.iinfo(np.uint32).max:
                    df[col] = df[col].astype(np.uint32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)
                elif c_min > np.iinfo(np.uint64).min and c_max < np.iinfo(np.uint64).max:
                    df[col] = df[col].astype(np.uint64)
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
        elif 'datetime' not in col_type.name and obj_to_category:
            df[col] = df[col].astype('category')
    gc.collect()
    end_mem = df.memory_usage().sum() / 1024 ** 2
    print('Memory usage after optimization is: {:.3f} MB'.format(end_mem))
    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))

    return df