【问题标题】:What is the fastest way to manipulate large csv files in Python?在 Python 中操作大型 csv 文件的最快方法是什么?
【发布时间】:2020-05-21 13:17:19
【问题描述】:

我一直在编写一个 python 代码,它读取一个包含 800 行和大约 17000 列的 csv 文件。 我想检查 csv 文件中的每个条目,看看这个数字是大于还是小于一个值,如果是,我分配一个默认值。我使用了 pandas 并使用了 dataframes、apply 和 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)

【问题讨论】:

  • 您的缩进混淆了。可以修一下吗?
  • 抱歉,现在好点了吗?
  • 这里有一大堆问题。在check_for_range 中,您的 try 块永远不会抛出(但它之外的东西会抛出)。我不确定“col.remove”位在做什么。为什么不使用apply 将函数应用于所有列?
  • @erip 我可以一次应用到所有列吗?我现在使用 for 循环一次应用到每一列。

标签: python csv large-files


【解决方案1】:

使用 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

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

Replacing elements in a numpy array when there are multiple conditions

【讨论】:

猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多