Pandas DataFrame 使用技巧

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。Pandas是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas的目标是成为 Python数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas离这个目标已经越来越近了。

接下来是在使用Pandas处理数据时的一些小技巧,也许能在日常工作数据处理中帮助提高效率:

首先创建一个DataFrame:

import pandas as pd
df = pd.DataFrame([{
    
    'a':1, 'b':2, 'c':3}]).T.reset_index()
df.columns = ['label','value']
df

在这里插入图片描述

1 添加进度条(tqdm)

from tqdm import tqdm
tqdm.pandas(desc="Process Bar")
df['pair'] = df.progress_apply(lambda x: (x['label'],x['value']), axis=1)
df

在这里插入图片描述
tqdm在其他循坏体种也可以展示进度,以下是一个简单例子:

for i in tqdm(range(5)):
    print(i)

在这里插入图片描述

2 一列拓展多列

df[['label_2','_value_2']] = df.apply(lambda x: x['pair'], axis=1, result_type='expand')
df

虽然pd.DataFrame和pd.Series两种数据结构在apply方法的使用上很相似,但是axisresult_type这些参数仅适用于pd.DataFrame。
在这里插入图片描述

3 dask并行计算

import dask.dataframe as dd
from dask.diagnostics import ProgressBar
ddf = df.copy()

with ProgressBar():  # 添加进度条
    ddf[['label_3','_value_3']] = dd.from_pandas(ddf, npartitions=8).map_partitions(lambda df: \
        df.apply(lambda x: x['pair'], axis=1, result_type="expand"), meta={
    
    0:'str',1:'f8'}).compute()
ddf

在这里插入图片描述
dask能够使pandas的DataFrame批量进行计算时采用多内核并行计算,充分利用CPU资源以提高运行速度。
① ProgressBar可为计算提供进度条。
npartitions为并行计算线程数,一般为计算机核心数。
③ 用dask的apply函数并设置result_type="expand"时,需要一个meta字典,用于明确每个列的数据类型,例如str, int或者 f8

4 保存CSV乱码问题

在这里插入图片描述
当我们想要将DataFrame保存成csv文件时,如果其中有中文那么经常会发现打开后乱码。例如上面这个DataFrame,我们用df.to_csv('data.csv')进行文件保存,打开后发现变成了这样:
在这里插入图片描述
保存文件时通过增加encoding='utf_8_sig'指定编码格式,即可轻松解决这个问题。

df.to_csv('data.csv', encoding='utf_8_sig')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40039731/article/details/130136930