• pandas模块篇(之三)


    今日内容概要

    目标:将Pandas尽量结束

    • 如何读取外部excel文件数据到DataFrame中
    • 针对DataFrame的常用数据操作
    • 索引与切片
    • 操作DataFrame的字段名称
    • 时间对象序列操作
    • 数据分组与聚合
    • 练习题

    今日内容详细

    如何读取外部excel文件数据到DataFrame中

    df = pd.read_csv('douban_movie.csv')  # 由于当前文件跟excel文件在同一个目录下所以可以直接写文件名
    # 如果不在同一个路径下 那么需要输入excel文件的绝对路径
    # '''
    # 绝对路径
    #     类似于全球具体坐标,任何人拿到该坐标都可以查找
    # 相对路径
    #     相对于一个参照物,并不是所有人都可以根据该坐标找到
    # '''
    df
    
    
    # 在读取文件的时候还可以自定义列
    df1 = pd.read_csv('douban_movie.csv',index_col='产地') 
    # df1.set_index('类型')
    df1
    # 都是用来指定读取出来的excel数据的左侧行名称(行名称必须是表格中存在的)
    
    # 将之前设置的行索引取消
    df1.reset_index()
    

    基本操作

    # 指定看前面多少条
    df.head(5)
    名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
    0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
    1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
    2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
    3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
    4	霸王别姬	478523.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港
            
    # 查看尾部指定条数的数据
    df.tail(5)
    
    # 查看数据条数
    len(df)
    38735
    
    # 查看数据的行列个数
    df.shape
    (38735, 9)
    
    # 查看行索引
    df.index
    RangeIndex(start=0, stop=38735, step=1)
    
    # 查看列字段
    df.columns
    Index(['名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分', '首映地点'], dtype='object')
    

    数据导出

    # 将DataFrame导出excel文件
    df.to_csv('db1.csv')  # 默认index=True 自动将DataFrame的行索引也导出
    
    
    df.to_csv('db2.csv',index=False)  # 忽略行索引
    

    索引与切片

    DataFrame也是由行索引和列索引,也可以通过标签和位置两种方法进行
    方式1
    	两个中括号,先取列再取行  df['A'][0]
    方式2
    	使用loc/iloc属性:一个中括号逗号隔开,先取行再取列
       	都是左侧
        
    df.loc[0:5]
    名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
    0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
    1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
    2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
    3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
    4	霸王别姬	66666666.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港
    5	泰坦尼克号	157074.0	剧情/爱情/灾难	美国	2012-04-10 00:00:00	194.0	2012	9.4	中国大陆
    df.iloc[0:5]
    名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
    0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
    1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
    2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
    3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
    4	霸王别姬	66666666.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港
    

    数据操作

    df['名字']  # 展示形式是Series
    
    df[['名字']]  # 用中括号扩一下就会变成表格的形式展示
    
    # 一次性获取多个列
    df[['名字','评分','类型']]
    
    # 切片获取数据条数
    df[0:10]
    
    # 获取指定数据
    df.at[4,'名字']  # at['行索引值','列名称']
    # 修改指定数据
    df.at[4,'名字'] = '爱情动作科幻大混合'
    # 利用关键字指定索引
    df.loc[1].at['名字']
    
    
    # 切片之后获取指定的列数据
    df[1:5][['名字','类型','年代']]
    
    
    # 数据快速筛选
    df[(df.评分 > 8.5) & (df.评分 < 9.0)]
    

    数据自定义展示

    >>> df = pd.DataFrame({
    ...     'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
    ...     'col2': [2, 1, 9, 8, 7, 4],
    ...     'col3': [0, 1, 9, 4, 2, 3],
    ... })
    >>> df
        col1 col2 col3
    0   A    2    0
    1   A    1    1
    2   B    9    9
    3   NaN  8    4
    4   D    7    2
    5   C    4    3
    
    Sort by col1
    >>> df.sort_values(by=['col1'])
        col1 col2 col3
    0   A    2    0
    1   A    1    1
    2   B    9    9
    5   C    4    3
    4   D    7    2
    3   NaN  8    4
    
    Sort by multiple columns
    
    >>> df.sort_values(by=['col1', 'col2'])
        col1 col2 col3
    1   A    1    1
    0   A    2    0
    2   B    9    9
    5   C    4    3
    4   D    7    2
    3   NaN  8    4
    Sort Descending
    
    >>> df.sort_values(by='col1', ascending=False)
        col1 col2 col3
    4   D    7    2
    5   C    4    3
    2   B    9    9
    0   A    2    0
    1   A    1    1
    3   NaN  8    4
    Putting NAs first
    
    >>> df.sort_values(by='col1', ascending=False, na_position='first')
        col1 col2 col3
    3   NaN  8    4
    4   D    7    2
    5   C    4    3
    2   B    9    9
    0   A    2    0
    1   A    1    1
    
    # 后面还可以对排序之后的结果筛选
    df.sort_values(['列名1','列名2'],ascending=True)[['目标列1','目标列2']]
    

    操作列

    df.rename(column={'旧列名称':'新列名称'},inplace=True)
    # 能修改 但是会报个错误 可以添加下列配置
    pd.set_option('mode.chained_assignment',None)
    
    
    # 创建新的列
    df['新列名称']=df.列名称/(df.列名称1+df.列名称2)
    
    # 自定义位置
    df.insert(3,'新列名称',新数据)
    

    操作行

    # 方式1 append
    >>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
    >>> df
       A  B
    0  1  2
    1  3  4
    >>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
    
    >>> df.append(df2)
       A  B
    0  1  2
    1  3  4
    0  5  6
    1  7  8
    With `ignore_index` set to True:
        
    >>> df.append(df2, ignore_index=True)
       A  B
    0  1  2
    1  3  4
    2  5  6
    3  7  8
    
    
    
    # 方式2 concat功能更强大  可以拼接Series和DataFrame
    pd.concat([res,df])
    pd.concat([res,df],ignore_index=True)
    '''
    本质其实就相当于拼接表格数据
    '''
    
    为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
  • 相关阅读:
    rest简单实例
    Rest简介
    java视频
    j2ee开发中的“java容器”和“web容器”有什么区别?
    用Java实现自己的ArrayList
    Java中关于枚举的7种用法
    Java多线程实现自然同步(内含演示案例)
    Java实现简单的文件复制
    Java之自动拆装箱
    写一个SingleTon,(饿最终、懒同步)
  • 原文地址:https://www.cnblogs.com/abudrSatan1998/p/13632613.html
Copyright © 2020-2023  润新知