我在使用 pandas 并寫入 CSV 檔案時遇到問題。當我運行 python 腳本時,要么記憶體不足,要么在腳本運行完成后我的計算機開始運行緩慢。有沒有辦法將資料分塊并將這些塊寫入CSV?我對 Python 編程有點陌生。
import itertools, hashlib, pandas as pd,time
chars = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
numbers_list = list(range(0,25))
chunksize = 1_000_000
rows = []
for combination in itertools.combinations_with_replacement(chars, 10):
for A in numbers_list:
pure = str(A) ':' str(combination)
B = pure.replace(")", "").replace("(", "").replace("'", "").replace(",", "").replace(" ", "")
C = hashlib.sha256(B.encode('utf-8')).hexdigest()
rows.append([A , B, C])
t0 = time.time()
df = pd.DataFrame(data=rows, columns=['A', 'B', 'C'])
df.to_csv('data.csv', index=False)
tdelta = time.time() - t0
print(tdelta)
我將非常感謝您的幫助!謝謝!
uj5u.com熱心網友回復:
由于您僅使用資料框寫入檔案,因此請完全跳過它。您將完整的資料集構建到 python 串列中的記憶體中,然后再次在資料框中構建,不必要地占用 RAM。標準庫中的csv模塊允許您逐行撰寫。
import itertools, hashlib, time, csv
chars = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
numbers_list = list(range(0,25))
chunksize = 1_000_000
with open('test.csv', 'w', newline='') as fileobj:
writer = csv.writer(fileobj)
for combination in itertools.combinations_with_replacement(chars, 10):
for A in numbers_list:
pure = str(A) ':' str(combination)
B = pure.replace(")", "").replace("(", "").replace("'", "").replace(",", "").replace(" ", "")
C = hashlib.sha256(B.encode('utf-8')).hexdigest()
writer.writerow([A , B, C])
這會很快,直到您填滿存盤前面的 RAM 快取,然后以作業系統可以將資料寫入磁盤的任何速度運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/529506.html
標籤:Python熊猫CSV
上一篇:csv包將每個字符決議為一行
