繁体   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