簡體   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