数据 相关

    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})  # 替换不同的值,通过字典
原文地址:https://www.cnblogs.com/wyf20190411-/p/13906699.html