Pandas提高数据分析效率的13个技巧汇总

目录
  • 1.计算变量缺失率
  • 2.获取分组里最大值所在的行方法
  • 3.多列合并为一行
  • 4.删除包含特定字符串所在的行
  • 5.组内排序
  • 6.选择特定类型的列
  • 7.字符串转换为数值
  • 8.优化 DataFrame 对内存的占用
  • 9.根据最大的类别筛选 DataFrame
  • 10.把字符串分割为多列
  • 11.把 Series 里的列表转换为 DataFrame
  • 12.用多个函数聚合
  • 13.分组聚合

1.计算变量缺失率

df=pd.read_csv('titanic_train.csv')
def missing_cal(df):
    """
    df :数据集

    return:每个变量的缺失率
    """
    missing_series = df.isnull().sum()/df.shape[0]
    missing_df = pd.DataFrame(missing_series).reset_index()
    missing_df = missing_df.rename(columns={'index':'col',
                                            0:'missing_pct'})
    missing_df = missing_df.sort_values('missing_pct',ascending=False).reset_index(drop=True)
    return missing_df
missing_cal(df)

如果需要计算样本的缺失率分布,只要加上参数axis=1.

2.获取分组里最大值所在的行方法

分为分组中有重复值和无重复值两种。无重复值的情况。

df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})
df

df.iloc[df.groupby(['Mt']).apply(lambda x: x['Count'].idxmax())]

先按Mt列进行分组,然后对分组之后的数据框使用idxmax函数取出Count最大值所在的列,再用iloc位置索引将行取出。有重复值的情况

df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64)
df[df["rank"] == 1][["ID", "class"]]

对ID进行分组之后再对分数应用rank函数,分数相同的情况会赋予相同的排名,然后取出排名为1的数据。

3.多列合并为一行

df = pd.DataFrame({'id_part':['a','b','c','d'], 'pred':[0.1,0.2,0.3,0.4], 'pred_class':['women','man','cat','dog'], 'v_id':['d1','d2','d3','d1']})

df.groupby(['v_id']).agg({'pred_class': [', '.join],'pred': lambda x: list(x),
'id_part': 'first'}).reset_index()

4.删除包含特定字符串所在的行

df = pd.DataFrame({'a':[1,2,3,4], 'b':['s1', 'exp_s2', 's3','exps4'], 'c':[5,6,7,8], 'd':[3,2,5,10]})
df[df['b'].str.contains('exp')]

5.组内排序

df = pd.DataFrame([['A',1],['A',3],['A',2],['B',5],['B',9]], columns = ['name','score'])

介绍两种高效地组内排序的方法。

df.sort_values(['name','score'], ascending = [True,False])
df.groupby('name').apply(lambda x: x.sort_values('score', ascending=False)).reset_index(drop=True)

6.选择特定类型的列

drinks = pd.read_csv('data/drinks.csv')
# 选择所有数值型的列
drinks.select_dtypes(include=['number']).head()
# 选择所有字符型的列
drinks.select_dtypes(include=['object']).head()
drinks.select_dtypes(include=['number','object','category','datetime']).head()
# 用 exclude 关键字排除指定的数据类型
drinks.select_dtypes(exclude=['number']).head()

7.字符串转换为数值

df = pd.DataFrame({'列1':['1.1','2.2','3.3'],
                  '列2':['4.4','5.5','6.6'],
                  '列3':['7.7','8.8','-']})
df
df.astype({'列1':'float','列2':'float'}).dtypes

用这种方式转换第三列会出错,因为这列里包含一个代表 0 的下划线,pandas 无法自动判断这个下划线。为了解决这个问题,可以使用 to_numeric() 函数来处理第三列,让 pandas 把任意无效输入转为 NaN。

df = df.apply(pd.to_numeric, errors='coerce').fillna(0)

8.优化 DataFrame 对内存的占用

方法一:只读取切实所需的列,使用usecols参数

cols = ['beer_servings','continent']
small_drinks = pd.read_csv('data/drinks.csv', usecols=cols)

方法二:把包含类别型数据的 object 列转换为 Category 数据类型,通过指定 dtype 参数实现。

dtypes ={'continent':'category'}
smaller_drinks = pd.read_csv('data/drinks.csv',usecols=cols, dtype=dtypes)

9.根据最大的类别筛选 DataFrame

movies = pd.read_csv('data/imdb_1000.csv')
counts = movies.genre.value_counts()
movies[movies.genre.isin(counts.nlargest(3).index)].head()

10.把字符串分割为多列

df = pd.DataFrame({'姓名':['张 三','李 四','王 五'],
                   '所在地':['北京-东城区','上海-黄浦区','广州-白云区']})
df
df.姓名.str.split(' ', expand=True)

11.把 Series 里的列表转换为 DataFrame

df = pd.DataFrame({'列1':['a','b','c'],'列2':[[10,20], [20,30], [30,40]]})
df

df_new = df.列2.apply(pd.Series)
pd.concat([df,df_new], axis='columns')

12.用多个函数聚合

orders = pd.read_csv('data/chipotle.tsv', sep='\t')
orders.groupby('order_id').item_price.agg(['sum','count']).head()

13.分组聚合

import pandas as pd
df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
    'key2':['one', 'two', 'one', 'two', 'one'],
    'data1':np.random.randn(5),
     'data2':np.random.randn(5)})
df

for name, group in df.groupby('key1'):
    print(name)
    print(group)

dict(list(df.groupby('key1')))

通过字典或Series进行分组

people = pd.DataFrame(np.random.randn(5, 5),
     columns=['a', 'b', 'c', 'd', 'e'],
     index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
mapping = {'a':'red', 'b':'red', 'c':'blue',
     'd':'blue', 'e':'red', 'f':'orange'}
by_column = people.groupby(mapping, axis=1)
by_column.sum()

到此这篇关于Pandas提高数据分析效率的13个技巧汇总的文章就介绍到这了,更多相关Pandas数据分析技巧内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 五个Pandas 实战案例带你分析操作数据

    目录 构建数据 分析维度1:时间 2019-2021年每月销量走势 2019-2021销售额走势 年度销量.销售额和平均销售额 分析维度2:商品 水果年度销量占比 各水果年度销售金额对比 商品月度销量变化 分析维度3:地区 不同地区的销量 分析维度4:用户 用户订单量.金额对比 用户水果喜好 用户分层—RFM模型 用户复购周期分析 大家好,之前分享过很多关于 Pandas 的文章,今天我给大家分享5个小而美的 Pandas 实战案例. 内容主要分为: 如何自行模拟数据 多种数据处理方式 数据统计

  • Pandas数据分析的一些常用小技巧

    Pandas小技巧 import pandas as pd pandas生成数据 d = {"sex": ["male", "female", "male", "female"], "color": ["red", "green", "blue", "yellow"], "age": [1

  • python数据分析必会的Pandas技巧汇总

    目录 一.Pandas两大数据结构的创建 二.DataFrame常见方法 三.数据索引 四.DataFrame选取和重新组合数据的方法 五.排序 六.相关分析和统计分析 七.分组的方法 八.读写文本格式数据的方法 九.处理缺失数据 十.数据转换 一.Pandas两大数据结构的创建 序号 方法 说明 1 pd.Series(对象,index=[ ]) 创建Series.对象可以是列表\ndarray.字典以及DataFrame中的某一行或某一列 2 pd.DataFrame(data,column

  • Python数据分析模块pandas用法详解

    本文实例讲述了Python数据分析模块pandas用法.分享给大家供大家参考,具体如下: 一 介绍 pandas(Python Data Analysis Library)是基于numpy的数据分析模块,提供了大量标准数据模型和高效操作大型数据集所需要的工具,可以说pandas是使得Python能够成为高效且强大的数据分析环境的重要因素之一. pandas主要提供了3种数据结构: 1)Series,带标签的一维数组. 2)DataFrame,带标签且大小可变的二维表格结构. 3)Panel,带标

  • 详解Python数据分析--Pandas知识点

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘 1. 重复值的处理 利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID. import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"], "departmentId":

  • Pandas提高数据分析效率的13个技巧汇总

    目录 1.计算变量缺失率 2.获取分组里最大值所在的行方法 3.多列合并为一行 4.删除包含特定字符串所在的行 5.组内排序 6.选择特定类型的列 7.字符串转换为数值 8.优化 DataFrame 对内存的占用 9.根据最大的类别筛选 DataFrame 10.把字符串分割为多列 11.把 Series 里的列表转换为 DataFrame 12.用多个函数聚合 13.分组聚合 1.计算变量缺失率 df=pd.read_csv('titanic_train.csv') def missing_c

  • Pandas实现数据类型转换的一些小技巧汇总

    前言 Pandas是Python当中重要的数据分析工具,利用Pandas进行数据分析时,确保使用正确的数据类型是非常重要的,否则可能会导致一些不可预知的错误发生. Pandas 的数据类型:数据类型本质上是编程语言用来理解如何存储和操作数据的内部结构.例如,一个程序需要理解你可以将两个数字加起来,比如 5 + 10 得到 15.或者,如果是两个字符串,比如「cat」和「hat」,你可以将它们连接(加)起来得到「cathat」.尚学堂•百战程序员陈老师指出有关 Pandas 数据类型的一个可能令人

  • 帮你提高开发效率的JavaScript20个技巧

    目录 1. 申明和初始化数组 2.进行求和.最小值和最大值 3. 对字符串.数字或对象的数组进行排序 4. 是否需要从一个数组中过滤掉无用的值? 5. 为各种条件使用逻辑运算符 6. 删除重复的值 7. 创建一个计数器对象或Map 8. 三元运算符很酷 9. 与传统的once相比,for循环更快. 10. 合并两个对象 11. 箭头函数 12. 可选链式 13. 打乱一个数组 14. 空值合并运算符 15. Rest & Spread 运算符 16. 缺省参数 17. 将十进制转换为二进制或十六

  • 13个Pandas实用技巧,助你提高开发效率

    原作:风控猎人 整理:数据管道 归纳整理了一些工作中常用到的pandas使用技巧,方便更高效地实现数据分析. 1.计算变量缺失率 df=pd.read_csv('titanic_train.csv') def missing_cal(df): """ df :数据集 return:每个变量的缺失率 """ missing_series = df.isnull().sum()/df.shape[0] missing_df = pd.DataFram

  • 17条提高工作效率的Python技巧分享

    目录 1.引言 2.技巧总结 2.1.处理用户的多个输入 2.2.处理多个条件语句 2.3.判断数字奇偶性 2.4.交换变量 2.5.反转字符串 2.6.判断字符串是否为回文串 2.7.尽量使用 Inline if statement 2.8.删除list中的重复元素 2.9.找到list中重复最多的元素 2.10.list 生成式 2.11.使用*args传递多个参数 2.12.在循环时处理下标 2.13.拼接list中多个元素 2.14.将两个字典进行合并 2.15.使用两个list生成一个

  • python 中的9个实用技巧,助你提高开发效率

    整理字符串输入 整理用户输入的问题在编程过程中极为常见.通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作.但是如果问题很复杂,可能有更好的方法来解决: user_input = "This string has some whitespaces... " character_map = { ord( ) : , ord( ) : , ord( ) : None } user_input.translate(character_map) #

  • 如何使用JS console.log()技巧提高工作效率

    我们知道 console.log(message)用法很简单,表示将参数message 打印到控制台上. console.log('前端小智') // 前端小智 const myAge = 28 console.log(myAge) // 28 本文主要介绍5个有用的技巧,可帮助你在使用console.log()时提高工作效率. 1. 打印全名变量 如果在控制台打印多个变量,是数量比较多的情况下,我们很难区别哪个变量对应哪个值. function sum(a, b) { console.log(

  • python 提高开发效率的5个小技巧

    很多时候学习是一种难者不会,会者不难的事情. 下面的5个python技巧是性价比极高的知识点,一学就会,不难但是相当管用. 使用交互模式 使用python -i xxxx.py可以直接进入python的交互模式,可以很方便的调用xxxx.py中定义的方法和函数,特别适合调试没有main()方法的文件,强力推荐. 使用pdb进行调试 很多从c++/java转到python的同学可能对python没有断点功能相当失望. 其实python自带的pdb库就可以解决这个问题. 看这个例子. def sum

  • Pandas数据处理加速技巧汇总

    目录 数据准备 日期时间数据优化 数据的简单循环 循环 .itertuples() 和 .iterrows() 方法 .apply() 方法 .isin() 数据选择 .cut() 数据分箱 Numpy 方法处理 处理效率比较 HDFStore 防止重新处理 Pandas 处理数据的效率还是很优秀的,相对于大规模的数据集只要掌握好正确的方法,就能让在数据处理时间上节省很多很多的时间. Pandas 是建立在 NumPy 数组结构之上的,许多操作都是在 C 中执行的,要么通过 NumPy,要么通过

随机推荐