【发布时间】:2023-03-04 16:59:01
【问题描述】:
我需要处理一个包含 300 万行和 7 列的大型 csv 文件。 DataFrame的形状:(3421083, 7)
我的计划是删除所有包含特定值(客户 ID)的行这是我如何进行的:
#keep track of iterations
track = 0
#import all transactions (orders.csv)
transactions = pd.read_csv('transactions.csv')
#We select all orders that are electronics orders and put them into a df
is_electronics = transactions[transactions.type == "electronics"]
#Create arrays that will store users to destroy in transactions.csv
users_to_remove = []
#iterate to add appropriate values:
# we add all users that ordered electronics to a list
for user in is_electronics.user_id:
users_to_remove.append(user)
#We delete from orders.csv
for user in users_to_remove:
transactions = transactions[transactions.user_id != user]
track += 1
if track == 100000:
print(track)
track = 0
transactions.to_csv('not_electronics.csv', index = False)
自 1 小时以来,此操作需要很长时间才能运行,但仍未完成。
我有一个 3.2 ghz 和 8GB 内存的四核台式机 i5。但是在活动监视器中,计算机只使用了 5 GB 的内存和 40% 的 CPU。
有什么方法可以加快这个过程的计算速度?通过更改代码或使用其他库?
我还有一个 gpu (gtx 970) 我可以用它来处理这个吗?
谢谢。
【问题讨论】:
-
您有超过 300 万条记录,您的代码是 accidentally quadratic。糟糕的组合。
-
我什至不确定您为什么要为此使用熊猫。只需流式传输 csv。
标签: python csv pandas optimization dataframe