[英]memory mismatch between pandas dataframe and csv file
我正在處理類似於以下博客的大型excel文件。
https://www.dataquest.io/blog/pandas-big-data/
這篇文章是關於將對象類型列轉換為類別類型的。 這減少了數據幀的內存使用量。
我正在使用88 MB的Excel文件。 在代碼中提到的步驟之后,我能夠將df的大小減小到28 MB。 問題是當我將其寫入csv文件時,該文件大小為193 MB,大於原始csv文件。
問題:什么原因導致內存不匹配以及如何解決? 提前致謝。
import pandas as pd
df=pd.read_excel('games_log.csv')
df.info(memory_usage='deep')
def mem_usage(pandas_obj):
if isinstance(pandas_obj,pd.DataFrame):
usage_b = pandas_obj.memory_usage(deep=True).sum()
else: # we assume if not a df it's a series
usage_b = pandas_obj.memory_usage(deep=True)
usage_mb = usage_b / 1024 ** 2 # convert bytes to megabytes
return "{:03.2f} MB".format(usage_mb)
#This part converts the columns of object type to category type
converted_obj = pd.DataFrame()
for col in df.columns:
num_unique_values = len(df[col].unique())
num_total_values = len(df[col])
if num_unique_values / num_total_values < 0.5:
converted_obj.loc[:,col] = df[col].astype('category')
else:
converted_obj.loc[:,col] = df[col]
print(mem_usage(converted_obj))
print(mem_usage(df))
converted_obj.to_csv('compressed_file.csv',index=False)
最后一行將數據幀寫入csv,但是文件大小很大。
if num_unique_values / num_total_values < 0.5:
所有列均為True
game_logs.csv = 132.901MB
df = pd.read_csv('game_logs.csv', dtype='category')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 171907 entries, 0 to 171906
Columns: 161 entries, date to acquisition_info
dtypes: category(161)
memory usage: 52.8 MB
df.to_csv('game_logs_new.csv', index=False)
game_logs_new.csv = 133.069MB
DataFrame
中。 DataFrame
轉換來減小文件的實際大小, DataFrame
不會發生(除非您刪除大量數據)。 dtype
以不同的方式存儲在內存中; 有些比其他的效率更高,但是當您將其保存回csv
,您仍然只是存儲一堆文本; dtype
從DataFrame
沒有被維持在csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.