【问题标题】:how to process 15 million of rows in csv file using python with high speed?如何使用python高速处理csv文件中的1500万行?
【发布时间】:2022-01-01 20:33:35
【问题描述】:

我在一个包含两列(学生 ID、问题 ID)的 csv 文件中有 1500 万行,每个学生回答多个问题,因此您会多次找到相同的学生 ID。和另一个具有 187000 行和两列(学生 ID,性别)的 csv 文件,我想在第一个名为“性别”的 csv 文件中添加一个新列,它代表 1500 万学生的性别(即使学生 ID 重复) 我使用 colaboratory(GPU 运行时类型)尝试此代码,会话在 3:40 小时后崩溃。 那么我会怎么做才能避免这种情况,并执行高速?

读取数据大约需要 7 秒

import pandas as pd

df=pd.read_csv('/content/drive/MyDrive/file1.csv')

dg=pd.read_csv('/content/drive/MyDrive/file2.csv')

但是处理中的问题:

df['Gender']=range(0,15000000)

for i in range(len(df.StudentId)):

  for k in range(len(dg.StudentId)):

    if df.StudentId[i] == dg.StudentId[k]:

      df.Gender[i]=dg.Gender[k]

【问题讨论】:

  • 简单答案:不要使用循环,而是使用矢量代码。现在具体来说,您应该提供一个数据示例和匹配的输出
  • 你为什么要这样循环数据框?
  • 我添加一张图片描述我需要什么,请看

标签: python csv google-colaboratory


【解决方案1】:

尝试根据学生ID列合并列。

  1. 使用 pandas (https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html) 加载 csv 文件

应该是这样的:

import pandas as pd
df_1 = pd.read_csv('/path/to/csv1.csv')
df_2 = pd.read_csv('/path/to/csv2.csv')
  1. 合并两个数据框 (https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html)
df_all = df_1.merge(df_2, left_on='student ID', right_on='student ID')
df_all.to_csv('/path/to/new_csv.csv')

另外注意:尽量避免迭代行。迭代是最大的性能杀手之一。大多数情况下,您可以找到特定的内置函数,它们可以更快地完成您想要的工作。

【讨论】:

  • 我宁愿建议 dask 多处理这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2021-04-17
  • 2023-03-31
  • 2013-04-22
  • 2016-02-24
  • 2019-10-18
相关资源
最近更新 更多