zoukankan      html  css  js  c++  java
  • Python-Pandas库-DataFrame处理excel/csv表格

    一、目录:

    缩写和包导入

    导入数据

    导出数据

    创建测试对象

    查看、检查数据

    数据选取

    数据清理

    数据处理:Filter、Sort和GroupBy

    数据合并

    数据统计

    二、概览

    缩写和包导入

    在这个速查手册中,我们使用如下缩写:

    df:任意的Pandas DataFrame对象
    s:任意的Pandas Series对象

    同时我们需要做如下的引入:

    import pandas as pd
    import numpy as np

    导入数据

    • pd.read_csv(filename):从CSV文件导入数据
    • pd.read_table(filename):从限定分隔符的文本文件导入数据
    • pd.read_excel(filename):从Excel文件导入数据
    • pd.read_sql(query, connection_object):从SQL表/库导入数据
    • pd.read_json(json_string):从JSON格式的字符串导入数据
    • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
    • pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
    • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

    导出数据

    • df.to_csv(filename):导出数据到CSV文件

    • df.to_excel(filename):导出数据到Excel文件

    • df.to_sql(table_name, connection_object):导出数据到SQL表

    • df.to_json(filename):以Json格式导出数据到文本文件

    创建测试对象

    • pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
    • pd.Series(my_list):从可迭代对象my_list创建一个Series对象
    • df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引
    #创建数据框DataFrame
    s = pd.DataFrame(data='一组数据:ndarray/series/columns/lists/dict等类型',index='索引值,行标签',columns='列标签,默认0到n',dtype='数据类型',copy='拷贝数据,默认False')
    
    #使用列表创建
    data = [['Google', 10],['baidu', 20],['firefox', 30]]
    df = pd.DataFrame(data)  #没有设置列名,默认0到n
    print(df)
    '''
    执行结果:
             0   1
    0   Google  10
    1    baidu  20
    2  firefox  30
    '''
    df1 = pd.DataFrame(data, index=['one', 'two', 'three'], columns=['name','age'],dtype=float)
    print(df1)
    '''
    执行结果:
              name   age
    one     Google  10.0
    two      baidu  20.0
    three  firefox  30.0
    '''
    
    #使用ndarray创建1:   ndarray对象是用于存放同类型元素的多维数组,ndarray对象的长度必须相同
    data = {'Site': ['Google', 'baidu', 'firefox'], 'Age': [10, 20, 30]}
    df = pd.DataFrame(data)
    print(df)
    '''
    执行结果:
          Site  Age
    0   Google   10
    1    baidu   20
    2  firefox   30
    '''
    #使用ndarray创建2
    print(type(np.random.randn(5,4)))       #<class 'numpy.ndarray'>
    df = pd.DataFrame(np.random.randn(5,4))    #创建5行4列的随机数组成的DataFrame对象
    
    df.index = pd.date_range('1900/1/30',periods=df.shape[0])   #增加一个日期索引
    print(df)
    '''
    执行结果:
                       0         1         2         3
    1900-01-30  1.119676  0.000332 -0.221642  1.418424
    1900-01-31  1.151577  0.317982  1.274081  1.143022
    1900-02-01  0.000107 -0.903553 -0.236362 -0.531132
    1900-02-02  0.187210 -1.580657  0.114724  1.263399
    1900-02-03  1.309918  0.424695 -0.142463 -0.515486
    '''
    
    
    #使用字典创建:对应的key为列名
    data = [{'a': 1, 'b': 2, 'c': 5, 'd': 8}, {'a': 3, 'b': 7, 'c': 5}]
    df = pd.DataFrame(data)
    print(df)    #没有对应的部分数据为NaN
    '''
       a  b  c    d          
    0  1  2  5  8.0
    1  3  7  5  NaN
    '''
    
    data = {
        "calories": [24, 56, 89],
        "duration": [30, 10, 90]
    }
    df = pd.DataFrame(data)       #数据载入到Dataframe对象
    print(df)
    '''
       calories  duration       #key为列名
    0        24        30
    1        56        10
    2        89        90
    '''
    print(type(df))      #<class 'pandas.core.frame.DataFrame'>
    #返回第一行
    print(df.loc[0])     #返回第一行的数据,并与列名对应
    '''
    执行结果: 
    calories    24
    duration    30
    Name: 0, dtype: int64
    '''
    #返回第一行指定的值
    print(df.loc[0]['calories'])        #执行结果: 24
    #返回第一行和第二行
    print(df.loc[[0,1]])
    '''
    执行结果:
       calories  duration
    0        24        30
    1        56        10
    '''

    查看、检查数据

    • df.head(n):查看DataFrame对象的前n行
    • df.tail(n):查看DataFrame对象的最后n行
    • df.shape:查看行数和列数
    • df.info():查看索引、数据类型和内存信息
    • df.describe():查看数值型列的汇总统计
    • s.value_counts(dropna=False):查看Series对象的唯一值和计数
    • df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
    #查看、检查数据(Viewing Data)
    print(df.to_string())   #用于返回Dataframe类型的数据,输出全部数据
    print(type(df.to_string()))     #<class 'str'>
    print(df.head())          #读取前五行
    print(df.tail())          #读取后五行
    print(df.info())       #查看索引、数据类型和内存信息
    '''
    执行结果:<class 'pandas.core.frame.DataFrame'>
    RangeIndex: 35 entries, 0 to 34
    Data columns (total 9 columns):
     #   Column   Non-Null Count  Dtype  
    ---  ------   --------------  -----  
     0   School   35 non-null     object 
     1   Class    35 non-null     object 
     2   ID       35 non-null     int64  
    '''
    print(df.shape)     #返回多少行多少列,执行结果: (35,9)
    print(df.describe()) #查看<数值型>列的汇总统计
    '''
    执行结果:
                   ID      Height      Weight       Math
    count    35.00000   35.000000   35.000000  35.000000
    mean   1803.00000  174.142857   74.657143  61.351429
    std     536.87741   13.541098   12.895377  19.915164
    min    1101.00000  155.000000   53.000000  31.500000
    25%    1204.50000  161.000000   63.000000  47.400000
    50%    2103.00000  173.000000   74.000000  61.700000
    75%    2301.50000  187.500000   82.000000  77.100000
    max    2405.00000  195.000000  100.000000  97.000000
    '''
    

    数据选取

    • df[col]:根据列名,并以Series的形式返回列
    • df[[col1, col2]]:以DataFrame形式返回多列
    • s.iloc[0]:按位置选取数据
    • s.loc['index_one']:按索引选取数据
    • df.iloc[0,:]:返回第一行
    • df.iloc[0,0]:返回第一列的第一个元素
    • df.values[:,:-1]:返回除了最后一列的其他列的所以数据
    • df.query('[1, 2] not in c'): 返回c列中不包含1,2的其他数据集
    #数据选取
    data = {'Site': ['Google', 'baidu', 'firefox'], 'Age': [10, 20, 30], 'Leader':['Eric', 'Lucky', 'Amily']}
    df = pd.DataFrame(data)
    print(df)
    '''
    执行结果:
          Site  Age Leader
    0   Google   10   Eric
    1    baidu   20  Lucky
    2  firefox   30  Amily
    '''
    print(df['Site'])   #根据列名返回列
    print(df[['Site','Leader']])    #以列表传入,以DataFrame形式返回多列
    print(df.iloc[0])      #按位置选取数据,返回列名与数据
    print(df.loc[1])     #按索引值返回第二行数据
    print(df.iloc[1,1])   #返回第二列的第二个元素
    print(df.values[:,:-1])   #返回除了最后一列的其他列所有数据
    '''
    执行结果:
    [['Google' 10]
     ['baidu' 20]
     ['firefox' 30]]
    '''
    

    数据清理

    • df.columns = ['a','b','c']:重命名列名
    • pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
    • pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
    • df.dropna():删除所有包含空值的行
    • df.dropna(axis=1):删除所有包含空值的列
    • df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
    • df.fillna(x):用x替换DataFrame对象中所有的空值
    • s.astype(float):将Series中的数据类型更改为float类型
    • s.replace(1,'one'):用‘one’代替所有等于1的值
    • s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
    • df.rename(columns=lambda x: x + 1):批量更改列名
    • df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
    • df.set_index('column_one'):更改索引列
    • df.rename(index=lambda x: x + 1):批量重命名索引

    数据处理:Filter、Sort和GroupBy

    • df[df[col] > 0.5]:选择col列的值大于0.5的行

    • df.sort_values(col1):按照列col1排序数据,默认升序排列

    • df.sort_values(col2, ascending=False):按照列col1降序排列数据

    • df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据

    • df.groupby(col):返回一个按列col进行分组的Groupby对象

    • df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象

    • df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值

    • df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表

    • df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值

    • data.apply(np.mean):对DataFrame中的每一列应用函数np.mean

    • data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

    数据合并

    • df1.append(df2):将df2中的行添加到df1的尾部
    • df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
    • df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join

    数据统计

    • df.describe():查看数据值列的汇总统计

    • df.mean():返回所有列的均值

    • df.corr():返回列与列之间的相关系数

    • df.count():返回每一列中的非空值的个数

    • df.max():返回每一列的最大值

    • df.min():返回每一列的最小值

    • df.median():返回每一列的中位数

    • df.std():返回每一列的标准差

     
     
    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    新浪微盘又是一个给力的产品啊,
    InfoQ: 百度数据库架构演变与设计
    列式数据库——Sybase IQ
    MapR初体验 淘宝共享数据平台 tbdata.org
    IBM正式发布新一代zEnterprise大型机(组图) 大型机,IBM,BladeCenter,美国,纽约 TechWeb News
    1TB is equal to the number of how many GB? 1PB equal to is equal to the number of TB? 1EB PB? | PCfault.com
    Cassandra vs HBase | WhyNosql
    The Hadoop Community Effect
    雅虎剥离开源软件平台 Hadoop ,与风投新建 Hortonworks 公司 品味雅虎
    RowOriented Database 、ColumnOriented Database 、KeyValue Store Database 、DocumentOriented Database
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/15123120.html
Copyright © 2011-2022 走看看