我正在使用 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/