• Task01 pandas基础 学习笔记


    前面的文件读取、常用基本函数、排序制作了思维导图。

    大纲

    ![U1 pandas基础](C:UserszhangcDesktopU1 pandas基础.png)

    五、问题与练习

    【问题一】 Series和DataFrame有哪些常见属性和方法?

    # Series属性
    s.values #values index dtype name属性在声明、访问时可使用
    # Series方法
    s.to_frame()	# 将Series数据转换成DataFrame格式
    
    ## DataFrame属性
    df.shape	# shape index columns values属性常用
    ## DataFrame方法
    df.rename(index={}, columns={}) # 关键字参数改行、列名
    df.info()	# df.describe() 返回数据信息
    df.drop(index="xx", columns="xx")	#删除指定行、列内容,默认原数据不改动,inplace=True则该
    # del  pop
    # assign方法增新列
    df.select_dtype() # 
    df.set_index()
    df.sort_index()
    df['Math'].unique()	# 唯一值
    ## count() idxmax() apply()等等太多了
    

    查看官方文档、或者help()及时查阅

    【问题二】 value_counts会统计缺失值吗?

    # 上文提到了counts() 统计非缺失元素的个数
    # value_counts()并不统计非缺失数据个数
    df = pd.DataFrame(np.arange(12).reshape(4,3), columns=['one','two','three'], index=[1,2,3,4])
    df = df.replace({'three':{8:float('nan')}})
    df
    Unnamed: 0	one	two	three
    0	1	0	1	2.0
    1	2	3	4	5.0
    2	3	6	7	NaN
    3	4	9	10	11.0
    
    df['three'].value_counts()
    11.0    1
    5.0     1
    2.0     1
    Name: three, dtype: int64
    

    【问题三】 与idxmax和nlargest功能相反的是哪两组函数?

    idxmax, idxmin;

    nlargest, nsmallest;

    【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。

    sum/mean/median/mad/min/max/abs/std/var/quantile/cummax/cumsum/cumprod

    sum/mean/median/min/max/abs/std/var/quantile是常见的统计方法
    mad
    cummax/cumsum/cumprod 为累计最大值,累计和,累计积
    
    
    df = pd.DataFrame(np.arange(12).reshape(4,3), columns=['one','two','three'], index=[1,2,3,4])
    df
    one	two	three
    1	0	1	2
    2	3	4	5
    3	6	7	8
    4	9	10	11
    
    df.mad()
    one      3.0
    two      3.0
    three    3.0
    dtype: float64
    
    df.cumsum() #看到这里是按列,一行行累加和的
    one	two	three
    1	0	1	2
    2	3	5	7
    3	9	12	15
    4	18	22	26
    

    【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?第一问提到的函数也有axis参数吗?怎么使用?

    他们是不一样的。一般函数默认axis=0,表示按操作;

    axis=1 表示按操作,理解成逐行提取再处理。

    img

    练习

    **【练习一】 ***

    现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:
    (a)在所有的数据中,一共出现了多少人物?

    import pandas as pd
    import numpy as np
    data = pd.read_csv("data/Game_of_Thrones_Script.csv")
    data.head(10)
    

    image-20200420105733863

    print("出现人物数量:%d" %(data['Name'].nunique() ))
    # 564
    

    (b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?

    print("谁说了最多话")
    # data.set_index(['Name','Sentence']).value_counts() #错误
    data['Name'].value_counts().index[0]
    # 'tyrion lannister'
    

    应该理解成,数据里面一行为一个人说的一句话,所以,统计Name出现次数即可。

    (c)以单词计数,谁说了最多的单词?

    # (c)以单词计数,谁说了最多的单词?
    
    # 每行数据中,Sentence中有几个单词 .assign()  #pd.Series( )
    words_count = data['Sentence'].apply( lambda x:len(x.split(sep=' ')) ) #已结是Series了
    data_with_word_num = data.assign(Words=words_count).sort_values(by='Name')
    data_with_word_num
    # 同一Name 的单次数量加一起, 排序
    new_data = list(zip(data_with_word_num['Name'], data_with_word_num['Words']) )
    ## 数据里面包的元组 ,sort方法无法使用
    
    ### 抽取里面的数量, 对其排序,
    # 这里我看了参考答案,:只抽取数量,按照原list顺序存放
    L_count = []
    for i in new_data:
        if i == new_data[0]:
            L_count.append(i[1])
            last = i[0] #暂存第一个单词
        else:
            L_count.append(L_count[-1]+i[1] if i[0]==last else i[1])
            ##终于理解了:对数据排序后,相同单词是前后放一起的,那就可以累加
            last = i[0]
    # len(L_count)
    data_with_word_num['Count'] = L_count
    data_with_word_num['Name'][data_with_word_num['Count'].idxmax()]
    

    作者也是个人才,七搞八搞的,
    思路:既然不太好直接排序,将name 单词数量 抽出来,相同名字的单词数量累加。
    这里的“累加” 保证了list的原长度。在计算结束后,将Count写入到DataFrame中。

    最后,读取最大的数据即可。

    【练习二】

    现有一份关于科比的投篮数据集,请解决如下问题:

    kb = pd.read_csv('data/Kobe_data.csv',index_col='shot_id')
    kb.head()
    

    (a)哪种action_type和combined_shot_type的组合是最多的?

    # 怎么将他们组合起来,然后要计数统计出现次数 -->> zip
    
    pd.Series( list(zip(kb['action_type'],kb['combined_shot_type'])) ).value_counts().index[0]
    # ('Jump Shot', 'Jump Shot')
    

    (b)在所有被记录的game_id中,遭遇到最多的opponent是一个支?

    d = {}
    for i in kb['game_id']:
        d[i]=kb[kb['game_id']==i]['opponent'].unique()
    
    d_count = pd.DataFrame(d.values())[0].value_counts()
    d_count.nlargest()
    # SAS    91
    

    最后一题是在网上找的参考,先将关系写入字典,然后转换为DF格式,统计值的数量,最后可以输出最大值了。

    参考

    DataFrame — pandas 1.0.3 documentation
    https://pandas.pydata.org/pandas-docs/stable/reference/frame.html

    joyful-pandas: Pandas中文教程
    https://github.com/datawhalechina/joyful-pandas

  • 相关阅读:
    SQL SERVER 错误:查询处理器用尽了内部资源,无法生成查询计划。这种情况很少出现,只有在查询极其复杂或引用了大量表或分区时才会出现。请简化查询。如果您认为该消息的出现纯属错误,请与客户支持服务部门联系,了解详细信息。
    大数据第十五周 Spark编程基础实例——wordCount编程
    Qt判断文件或文件夹是否存在
    windows解决访问Github慢
    朴素贝叶斯算法-非模型
    Qt自绘系列
    QStackedWidget动态多界面
    C++判断两个指针指向的对象是否相同
    Qt之自绘控件
    Python2.7安装OpenCV错误:TypeError: ‘NoneType’ object is not iterable
  • 原文地址:https://www.cnblogs.com/achenger/p/12771921.html
Copyright © 2020-2023  润新知