繁体   English   中英

在 Python 中操作大型 csv 文件的最快方法是什么?

[英]What is the fastest way to manipulate large csv files in Python?

我一直在研究一个 python 代码,它读取一个 csv 文件,其中包含 800 奇数行和大约 17000 列。 我想检查 csv 文件中的每个条目,看看这个数字是大于还是小于一个值,如果是,我分配一个默认值。 我使用了 pandas 并使用了数据帧、应用和 lambda 函数。 我需要 172 分钟才能完成 csv 文件中的所有条目。 正常吗? 有没有更快的方法来做到这一点? 我正在使用 Python 2.7。 我不知道它是否有帮助,但我在具有 32GB 内存的 windows 10 机器上运行它。 在此先感谢您的帮助。

代码附在下面。


def do_something(some_dataframe):
    col = get_req_colm(some_dataframe)
    modified_dataframe = pd.DataFrame()
    for k in col:
        temp_data = some_dataframe.apply(lambda x: check_for_range(x[k]), axis=1).tolist()
        dictionary = {}
        dictionary[str(k)] = temp_data
        temp_frame = pd.DataFrame(dictionary)
        modified_dataframe = pd.concat([modified_dataframe, temp_frame], axis=1)
    return modified_dataframe

def check_for_range(var):
    var = int(var)
    try:
        if var == 0:
            return 0
        if var == 1 or var == 4:
            return 1
        if var == 2 or var == 3 or var == 5 or var == 6:
            return 2
    except:
        print('error')

def get_req_colm(df):
    col = list(df)
    try:
        col.remove('index/Sample count')
        col.remove('index / Sample')
        col.remove('index')
        col.remove('count')
    except:
        pass
    return col

df_after_doing_something = do_something(some_dataframe)
df_after_doing_something.to_csv(output_folder + '\\df_after_doing_something.csv', index=False)

使用 pandas,用于 cvs 数据,使其高效。 但是您的代码效率不高。如果您尝试给出打击的代码,它会更快。

def do_something(some_dataframe):
    col = get_req_colm(some_dataframe)
    col = col.to_numpy()
    np_array = np.zeros_like(col)
    for i in range(len(col)):
        k = np_array[i]
        temp_data = np.zeros_like()
        temp_data[k == 1 or k == 4] = 1
        temp_data[k == 2 or k == 3 or k == 5 or k == 6] = 2
        np_array[i] = k
    modified_dataframe = pandas.Dataframe(np_array)
    return modified_dataframe

def get_req_colm(df):
    col = list(df)
    try:
        col.remove('index/Sample count')
        col.remove('index / Sample')
        col.remove('index')
        col.remove('count')
    except:
        pass
    return col

它会完美运行,不要忘记导入 numpy。

import numpy as np

如果你没有得到这个 go 并检查一些 numpy 教程然后去做。 下面给出的链接将对您有所帮助

有多个条件时替换 numpy 数组中的元素

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM