簡體   English   中英

使用 pandas/dask Python 操作 large.csv 文件

[英]Operating large .csv file with pandas/dask Python

我從英國土地登記處獲得了一個 large.csv 文件 (5GB)。 我需要找到所有被買賣兩次或多次的房地產。

表格的每一行如下所示:

{F887F88E-7D15-4415-804E-52EAC2F10958},"70000","1995-07-07 00:00","MK15 9HP","D","N","F","31","","ALDRICH DRIVE","WILLEN","MILTON KEYNES","MILTON KEYNES","MILTON KEYNES","A","A"

我從未使用過 pandas 或任何數據科學庫。 到目前為止,我已經提出了這個計划:

  1. 加載.csv文件並添加標題和列名

  2. 刪除不必要的列

  3. 創建已編輯 df 的 hashmap 並查找重復項

  4. 將重復項導出到新的.csv 文件

  5. 根據我的研究,我發現 pandas 對非常大的文件不好,所以我使用了 dask

df = dd.read_csv('pp-complete.csv', header=None, dtype={7: 'object', 8: 'object'}).astype(str)
df.columns = ['ID', 'Price', 'Date', 'ZIP', 'PropType', 'Old/new', 'Duration', 'Padress', 'Sadress', 'Str', 'Locality', 'Town', 'District', 'County', 'PPDType', 'Rec_Stat']
df.head()
  1. 在我嘗試刪除不必要的列之后
df.drop('ID', axis=1).head()

也試過

indexes_to_remove = [0, 1, 2, 3, 4, 5, 6, 7, 14, 15, 16]
for index in indexes_to_remove:
    df.drop(df.index[index], axis=1)

沒有任何效果。

任務是展示已購買/出售兩次或多次的房產。 我決定只使用地址列,因為其他列的數據不一致(ID - 是唯一的交易代碼、日期、報價類型等)

我需要用最少的 memory 和 CPU 使用率來完成這項任務,這就是我選擇 hashmap 的原因。

我不知道是否有另一種方法可以更輕松或更有效地做到這一點。

一些小建議:

  • 如果 5GB 是完整的數據集,最好使用普通的 pandas。 您概述的策略可能涉及跨分區的通信,因此計算成本會更高(或者需要一些工作以提高效率)。 使用pandas ,所有數據都將在 memory 中,因此排序/重復檢查將很快。

  • 在代碼中,確保分配修改后的 dataframe。 通常分配修改以替換現有的 dataframe:

# without "df = " part, the modification is not stored
df = df.drop(columns=['ID'])
  • 如果 memory 是一個很大的約束,那么請考慮僅加載您需要的數據(而不是加載所有內容然后刪除特定列)。 為此,我們需要將列列表提供給usecols的 usecols pd.read_csv 這是粗略的想法:
column_names = ['ID', 'Price', 'Date', 'ZIP', 'PropType', 'Old/new', 'Duration', 'Padress', 'Sadress', 'Str', 'Locality', 'Town', 'District', 'County', 'PPDType', 'Rec_Stat']
indexes_to_remove = [0, 1, 2, 3, 4, 5, 6, 7, 14, 15, 16]
indexes_to_keep = [i for i in range(len(column_names)) if i not in indexes_to_remove]
column_names_to_keep = [n for i,n in enumerate(column_names) if i in indexes_to_keep]

df = pd.read_csv('some_file.csv', header=column_names_to_keep, usecols=indexes_to_keep)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM