作者 | 大邓
来源 | 大邓和他的Python
上一篇文章 写的是处理GB级数据时datatable比pandas会更高效,但是datatable使用起来毕竟不如pandas来的顺手。所以今天准备介绍pandas的三个使用技巧来让我们的运行效率提高,以便处理较大体量的数据。
csv格式是常见的数据存储方式,对于我们普通人而言易于读写。此外,在pandas中有pd.read_csv()函数可以将csv形式的数据进行读取。但当csv文件非常大的时候,直接读取会很吃内存,甚至会出现内存不够用的情况。
这时候我们可以 分批次(分块)读取,而不是一次性读取 这么大体量的数据。操作步骤:
pd.read_csv(chunksize)
中的chunksize指的的是每一批次的行数
import pandas as pd
chunk_iterator = pd.read_csv("largest_data.csv", chunksize=10000)
chunk_result_list = []
#每一批次都是dataframe类型for chunk in chunk_iterator: #根据你的分析问题,设计自己的chunk_manipulate函数 filter_result = chunk_manipulate(chunk) chunk_result_list.append(filter_result)
#合并所有批次处理结果,形成新的dataframedf = pd.concat(chunk_result_list)
有时候我们使用的数据中含有是Na,这时候剔除含有Na的数据会减少很多数据量。这里用到 df.dropna(how,thresh,subset)
import pandas as pd
use_cols = ["stock_price", "stock_volume", "stock_symbol", "dividend", "eps"]ignore_cols = ["stock_name", "data_of_ipo"]
#usecols使用的特征名df = pd.read_csv("large_data.csv", usecols=use_cols)
#剔除na数据df.dropna()
对于大多数数据科学家而言,并不需要设置特征的数据类型,但是当处理的数据极其庞大的时候,我们就不得不考虑设置特征的数据类型以降低内存开销。
例如在csv的特征列中,某一列特征是32bit浮点数类型,但32bit浮点太精确了,实际上我们仅仅使用16bit就够用了。pd.read_csv(dtype)可以设置列的数据类型
import pandas as pdimport numpy as np
#column_A 32bit#column_B 16bitdf = pd.read_csv("large_data.csv", dtype={'column_A': np.int32, 'column_B': np.float16})
End