zoukankan      html  css  js  c++  java
  • 数据 相关

        1.数据导入
            pandas提供了一些用于将表格型数据读取为DataFrame对象的函数
            
                函数        描述    
                read_csv    从文件、url或者文件型对象读取分割好的数据,逗号是默认分隔符    
                read_table    从文件、url或者文件型对象读取分割好的数据,制表符('	')是默认分隔符    
                read_fwf    读取定宽格式数据(无分隔符)    
                read_clipboard    读取剪贴板中的数据,可以看做read_table的剪贴板。再将网页转换为表格    
                read_excel    从Excel的XLS或者XLSX文件中读取表格数据    
                read_hdf    读取pandas写的HDF5文件    
                read_html    从HTML文件中读取所有表格数据    
                read_json    从json字符串中读取数据    
                read_pickle    从Python pickle格式中存储的任意对象    
                read_msgpack    二进制格式编码的pandas数据    
                read_sas    读取存储于sas系统自定义存储格式的SAS数据集    
                read_stata    读取Stata文件格式的数据集    
                read_feather    读取Feather二进制文件格式    
                read_sql    将SQL查询的结果(SQLAlchemy)读取为pandas的DataFrame
            
            相关参数
                参数    描述    
                path    表明文件系统位置的字符串、URL或者文件型对象    
                sep或delimiter    用于分隔每行字段的字符序列或正则表达式    
                header    用作列名的行号,默认是0(第一行),如果没有为None    
                names    结果的列名列表,和header=None一起用    
                skiprows    从文件开头起,需要跳过的行数或者行号列表    
                na_values    用NA替换的值序列(可以用来处理缺失值)    
                data_parser    用于解析日期的函数    
                nrows    从文件开头处读取的行数    
                chunksize    用于设置迭代的块大小    
                encoding    设置文本编码
                        
            -1.read_csv
                    csv文件就是一个以逗号分隔字段的纯文本文件,用于测试的文件是本身是一个Excel文件,
                需要修改一下扩展名,但是简单的修改后缀名不行,还需要将字符编码改变为utf-8,因为默认
                的是ASCII,否则是会报错的。然后就可以通过read_csv将它读入到一个DataFrame对象;
                
                import pandas as pd
                #默认列名
                df = pd.read_csv("E:/Test/test3.csv",,header=None)
                df
                    name    age    sex
                0    佩奇    181    乔治    19    男
                pd.head()#默认显示前五条
                
                #指定列名
                import pandas as pd
                df = pd.read_csv("E:/Test/test.csv",names=['','','','','','',''])
                df
                        
            -2.read_html('url') 从HTML文件中读取所有表格数据    
            
        2.数据转化
        
            1、删除重复值
                data = pd.DataFrame({"k1":['one','two'] * 3 + ['two'],
                                    "k2":[1,1,2,3,3,4,4]})
                data
                运行结果:
                    k1    k2
                0    one    1
                1    two    1
                2    one    2
                3    two    3
                4    one    3
                5    two    4
                6    two    4
                -----------------------------------------------
                data.duplicated()  # 返回一个布尔型Series,表示各行是否是重复行
                0    False
                1    False
                2    False
                3    False
                4    False
                5    False
                6     True
                dtype: bool
                -----------------------------------------------
                data.drop_duplicates()  # 返回一个DataFrame,重复的数组会标为False
                    k1    k2
                0    one    1
                1    two    1
                2    one    2
                3    two    3
                4    one    3
                5    two    4   
                # 重复的行被删除了
                -----------------------------------------------
                以上方法是针对全部列,还可以通过传入参数对部分指定列进行重复项判断。
    
    
                data['v1'] = range(7)  # 添加一个v1列
                data.drop_duplicates(['k1','k2'])  # 可以传入一个列表,指定列,默认保留第一个出现的值组合
                    k1    k2    v1
                0    one    1    0
                1    two    1    1
                2    one    2    2
                3    two    3    3
                4    one    3    4
                5    two    4    5
                -----------------------------------------------
                data.drop_duplicates(['k1','k2'],keep='last')  # 默认保留最后一个出现的值组合
                    k1    k2    v1
                0    one    1    0
                1    two    1    1
                2    one    2    2
                3    two    3    3
                4    one    3    4
                6    two    4    6
                
            2、使用函数或映射进行数据转换
    
                data = pd.DataFrame({"goods":['Iphone','HUAWEI','SAMSUNG','MI','OPPO'], "price":[6000,4000,5000,3000,3000]})
                data
                运行结果:
                    goods    price
                0    Iphone    6000
                1    HUAWEI    4000
                2    SAMSUNG    5000
                3    MI        3000
                4    OPPO    3000
                现在有这样一组数据,假设现在需要加上一列数据。将每样商品的出产国家加上
    
    
                # 先定义一个不同商品到产地的映射
                produce_nation = {
                    "iphone":'America',
                    "huawei":'China',
                    "samsung":'Korea',
                    "mi":'China',
                    "oppo":'China'
                }
                # 因为定义的商品全是大写,需要全部转换为小写
                lower_cased = data['goods'].str.lower()
    
                # 通过map映射添加一列出产国家数据
                data['nation'] =  lower_cased.map(produce_nation)
                运行结果:
                    goods    price    nation
                0    Iphone    6000    America
                1    HUAWEI    4000    China
                2    SAMSUNG    5000    Korea
                3    MI        3000    China
                4    OPPO    3000    China
                也可以通过一个函数完成这些工作:
    
                data['goods'].map(lambda x:produce_nation[x.lower()])
                运行结果:
                0    America
                1      China
                2      Korea
                3      China
                4      China
                Name: goods, dtype: object
            
            3、替换值
    
                利用fillna()方法填充缺失数据是值替换的一种特殊情况。接下来可以使用replace方法进行替换值操作。
    
                data = pd.Series([1., -999., 2., -999., -1000., 3.])
                data   # 生成一个Series数组
                运行结果:
                0       1.0
                1    -999.0
                2       2.0
                3    -999.0
                4   -1000.0
                5       3.0
                dtype: float64
                ----------------------------------------------
                # 其中-999可能是缺失值的某一标识,需要使用NA替代这些值
                1、
                    data.replace(-999, np.nan)  # 通过replace产生一个新的Series,除非传入inplace=True
                    运行结果:
                    0       1.0
                    1       NaN
                    2       2.0
                    3       NaN
                    4   -1000.0
                    5       3.0
                    dtype: float64
                2、
                    data.replace([-999, -1000], np.nan)  # 一次性替换多个值
                3、
                    data.replace([-999, -1000], [np.nan, 0])  # 替换不同的值,通过列表
                4、
                    data.replace({-999: np.nan, -1000: 0})  # 替换不同的值,通过字典
  • 相关阅读:
    HTML基础
    JPA+atomikos实现分布式事务
    SpringBoot使用MybatisGenerator操作数据
    Spring data JPA的多数据源实现
    整合Spring Data JPA操作数据及排序分页
    首次git推送到远端
    SpringBoot结合Jpa的post为空和时间问题
    记一次SptingBoot启动报错Error creating bean with name 'requestMappingHandlerAdapter'
    解决IDEA中Cannot resolve table * 的问题
    Sringboot jdbc 操作数据库
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/13906699.html
Copyright © 2011-2022 走看看