【问题标题】:averaging columns on a very big matrix of data (approximately 150,000*80) in a normal runtime在正常运行时对非常大的数据矩阵(大约 150,000*80)的列进行平均
【发布时间】:2021-08-26 14:25:58
【问题描述】:

我在分析非常大的矩阵时遇到问题。

我有 4 个大数字矩阵(介于 0 到 1 之间),每个矩阵包含超过 100,000 行,70-80 列。

我需要平均每一列,并根据列标题将它们添加到列表中。

我尝试使用 pandas 内置的 mean() 方法(输入是 pandas 数据帧),但运行时很疯狂(计算 单个 列的平均值需要数小时)而且我负担不起那个运行时间。 关于如何在正常运行时执行此操作的任何建议?

我在这里添加我的代码-

def filtering(data):
    healthy=[]
    nmibc_hg=[]
    nmibc_lg=[]
    mibc_hg=[]
    for column in data:
        if 'HEALTHY' in column:
            healthy.append(data[column].mean())

        elif 'NMIBC_HG' in column:
            nmibc_hg.append(data[column].mean())

        elif 'NMIBC_LG' in column:
            nmibc_lg.append(data[column].mean())
        

        elif 'MIBC_HG' in column and not 'NMIBC_HG' in column:
            mibc_hg.append(data[column].mean())

【问题讨论】:

  • 150,000 行不应该花那么长时间。您能否为相关列显示df.info() 的输出?
  • 您的处理过程一定有问题,或者数据类型异常。 1M 行的快速测试需要 15 毫秒 pd.DataFrame(np.random.random(size=1000000)).mean()
  • 你说得对,我的 CSV 文件有问题。谢谢大家!

标签: python pandas dataframe data-analysis


【解决方案1】:

使用df.mean(),它将为数据框df中的每个数字列生成一个平均值。列名和摘要结果进入 pandas 系列。我在一个有 190,000 行和 12 个数字列的数据框上进行了尝试,只用了 4 秒。您的数据集也应该只需要几秒钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2010-09-25
    • 2010-09-28
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多