python - Pandas 处理大型 CSV 数据

标签 python pandas dataframe

我正在使用 pandas 处理一个大小至少为 8GB 的​​大型数据集。

我在读取整个集合时遇到问题,所以我逐 block 读取文件。

据我了解,对整个文件进行分 block 会创建许多不同的数据帧。因此,使用我现有的例程,这只会删除该特定数据帧上的重复值,而不是整个文件上的重复值。

我需要根据 ['Unique Keys'] 列删除整个数据集上的重复项。

我尝试使用 pd.concat 但我也遇到了内存问题,所以我尝试将文件写入 csv 文件并将数据帧的所有结果附加到它上面。

运行代码后,文件并没有减少太多,所以我认为我的假设是正确的,即当前例程没有删除基于整个数据集的所有重复项。

我是 Python 的新手,所以如果有人能为我指明正确的方向,那将非常有帮助。

def removeduplicates(filename):
    CHUNK_SIZE = 250000
    df_iterator = pd.read_csv(filename, na_filter=False, chunksize=CHUNK_SIZE,
                                      low_memory=False)
    # new_df = pd.DataFrame()
    for df in df_iterator:
        df = df.dropna(subset=['Unique Keys'])
        df = df.drop_duplicates(subset=['Unique Keys'], keep='first')

        df.to_csv(join(file_path, output_name.replace(' Step-2', '') +
                       ' Step-3.csv'), mode='w', index=False, encoding='utf8')

最佳答案

如果您可以将一组唯一键放入内存中:

def removeduplicates(filename):
    CHUNK_SIZE = 250000
    df_iterator = pd.read_csv(filename, na_filter=False, 
                              chunksize=CHUNK_SIZE,
                              low_memory=False)
    # create a set of (unique) ids
    all_ids = set()

    for df in df_iterator:
        df = df.dropna(subset=['Unique Keys'])
        df = df.drop_duplicates(subset=['Unique Keys'], keep='first')

        # Filter rows with key in all_ids
        df = df.loc[~df['Unique Keys'].isin(all_ids)]

        # Add new keys to the set
        all_ids = all_ids.union(set(df['Unique Keys'].unique()))

关于python - Pandas 处理大型 CSV 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60629652/

相关文章:

Python txt 文件字数统计程序

Pythonlogging setLevel 整数输入是什么意思?

python - 用停止填充 pandas 系列中的 NA 值

python - 比较列值的长度

python - 在 pd.get_dummies 返回 255 而不是 -1 之前添加减号

python - Pandas 优化两列上的日期时间比较

python - 替换我的功能的更好方法?

python - Pandas 群体内的变量转移

python - 如何在 PyQt4 日历小部件中为日期着色?

Python:如何根据另一个 list_of_lists 对 list_of_lists 进行排序?