美文网首页数据分析
05. Python科学计算:Pandas

05. Python科学计算:Pandas

作者: 进击的原点 | 来源:发表于2019-02-15 13:11 被阅读19次

    数据结构:Series 和 DataFrame

    • Series: 是一个定长的字典序列。有两个基本属性:index,values
    
    from pandas import Series, DataFrame
    x1 = Series([1,2,3,4])
    x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
    
    print (x1)
    print (x2)
    

    运行结果:

    1    2
    2    3
    3    4
    dtype: int64
    a    1
    b    2
    c    3
    d    4
    dtype: int64
    

    我们也可以采用字典的方式来创建 Series,比如:

    • DataFrame: 类似于数据库表的一种数据结构。我们甚至可以像操作数据库表那样对DataFrame数据进行
    df1= DataFrame(data)
    df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
    print (df1)
    print (df2)
    

    运行结果:

     Chinese  English  Math
    0       66       65    30
    1       95       85    98
    2       93       92    96
    3       90       88    77
    4       80       90    90
     English  Math  Chinese
    ZhangFei         65    30       66
    GuanYu           85    98       95
    ZhaoYun          92    96       93
    HuangZhong       88    77       90
    DianWei          90    90       80
    

    数据导入和输出

    from pandas import Series, DataFrame
    score = DataFrame(pd.read_excel('data.xlsx'))
    score.to_excel('data1.xlsx')
    print score
    

    数据清洗

    1. 删除 DataFrame 中的不必要的列或行
    df2 = df2.drop(columns=['Chinese'])
    
    1. 重命名列名
    df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
    
    1. 去重复的值
    df = df.drop_duplicates() # 去除重复行
    
    1. 格式问题
    • 更改数据格式
    df2['Chinese'].astype('str') 
    df2['Chinese'].astype(np.int64) 
    
    • 数据间的空格
    # 删除左右两边空格
    df2['Chinese']=df2['Chinese'].map(str.strip)
    # 删除左边空格
    df2['Chinese']=df2['Chinese'].map(str.lstrip)
    # 删除右边空格
    df2['Chinese']=df2['Chinese'].map(str.rstrip)
    

    有没有符号想删掉,怎么写

    df2['Chinese']=df2['Chinese'].str.strip('$')
    
    
    • 大小写的转换
    # 全部大写
    df2.columns = df2.columns.str.upper()
    # 全部小写
    df2.columns = df2.columns.str.lower()
    # 首字母大写
    df2.columns = df2.columns.str.title()
    
    • 查找空值
    df.isnull()
    

    使用apply函数进行清洗

    df['name'] = df['name'].apply(str.upper)
    

    数据统计

    image.png

    describe 函数是个大礼包,里面包含各类统计

    df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
    print df1.describe()
    

    运行结果

              data1
    count  5.000000
    mean   2.000000
    std    1.581139
    min    0.000000
    25%    1.000000
    50%    2.000000
    75%    3.000000
    max    4.000000
    

    数据表合并

    df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
    df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
    

    创建两个 DataFrame作为测试数据

    • 基于指定列进行连接
    • Inner内连接
    • left左连接
    • right右连接
    • outer外连接
    # 基于指定列连接
    df3 = pd.merge(df1, df2, on='name')  
    # inner内连接
    df3 = pd.merge(df1, df2, how='inner')
    # left左连接
    df3 = pd.merge(df1, df2, how='left')
    # right右连接
    df3 = pd.merge(df1, df2, how='right')
    # outer外连接
    df3 = pd.merge(df1, df2, how='outer')
    

    如何用 SQL 方式打开 Pandas

    pandasql

    import pandas as pd
    from pandas import DataFrame
    from pandasql import sqldf, load_meat, load_births
    df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
    pysqldf = lambda sql: sqldf(sql, globals())
    sql = "select * from df1 where name ='ZhangFei'"
    print pysqldf(sql)
    

    运行结果:

       data1      name
    0      0  ZhangFei
    
    image.png

    相关文章

      网友评论

        本文标题:05. Python科学计算:Pandas

        本文链接:https://www.haomeiwen.com/subject/eayeeqtx.html