美文网首页
pandas学习

pandas学习

作者: 金融非耐斯 | 来源:发表于2023-04-12 15:32 被阅读0次

    1.pandas是什么?

    pandas是基于Numpy创建的Python库,为Python提供了易于使用的数据结构和数据分析工具。

    2.如何使用pandas?

    2.1 导入pandas库

    import pandas as pd
    

    2.2 数据结构

    1) Series

    series可以理解为是一维数组,series翻译过来是连续的、串联,使用方式如下:

    s = pd.Series([1,2,45,5], index=['a','b','c','d'])
    
    index data
    a 1
    b 2
    c 45
    d 5
    2) DataFrame

    DataFrame是一个二维的数组,使用方式如下:

    data = {'姓名':['张三','李四','王五'],
           '性别':['男','女','女'],
           '年龄':['21','15','18']}
    df = pd.DataFrame(data, columns=['姓名','性别','年龄'])
    
    姓名 性别 年龄
    张三 1 21
    李四 15
    王五 18
    3)表格的操作
    • 读取、写入CSV
    pd.read_csv('file.csv', header=None, nrows=5)
    df.to_csv('myDataFrame.csv')
    
    • 读取、写入EXCEL
    pd.read_ecxel('file.xlsx')
    pd.to_excel('myDataFrame.xlsx', sheet_name='Sheet1')
    # 读取内含多个表格的EXCEL
    xlsx = pd.ExcelFile('file.xls')
    df = pd.read_excel(xlsx, 'Sheet1')
    
    4)定位元素at,iat,loc,iloc,ix

    带i的是索引,不带i的是标签,ix是既可以用标签,也可以用位置

    print(df.at['行标签名', '列标签名'])
    print(df.iat['行索引号', '列索引号'])
     
    print(df.loc['行标签名', '列标签名'])
    print(df.iloc[行索引数字, 列索引数字])
     
    print(df.loc['行标签名1':'行标签名2', '列标签名1': '列标签名2'])
    print(df.iloc[行索引数字1:行索引数字2, 列索引数字1:列索引数字2])
    print(df.iloc[[行索引数字1,行索引数字2,行索引数字3],[列索引数字1,列索引数字2]])
    
    5)其他常用操作
    • 行列操作
    # 将行变为列
    df_r = df.pivot(index='Date', columns='Type', values='Value')
    # 将行变为列 表操作
    df_r = pd.pivot_table(df,values='Value', index='Date', columns='Type')
    # 融合
    pd.melt(df, id_vars=['Date', value_vars=['Type','Value'], value_name=''] )
    # 迭代
    df.iteritems() 列索引
    df.iterrows()  行索引
    
    Date Type Value
    2016-03-01 a 12
    2016-03-03 b 12
    2016-03-05 c 5
    2016-03-09 a 45
    2016-03-19 b 9
    • 索引操作
    #设置、取消索引
    df.set_index('Country')         #设置索引
    df2 = df.reset_index()          #取消索引
    df = df.rename(index=str, columns={'Country':'cntry','Capital':'cptl','Population':'ppltn'})   #重命名DataFrame列名
    
    # 重置索引
    s2 = s.reindex(['a','b','c'])
    df.reindex(range(4), method='ffill') #前向填充
    s3 = s.reindex(range(5), method='bfill') #后向填充
    
    # 基础操作
    df.loc[:, (df>1).any()]         #选择任一值大于1的列
    df.loc[:, (df>1).all()]         #选择所有值大于1的列
    df.loc[:, df.isnull()).any()]   #选择含NaN值的列
    df.loc[:, df.notnull()).all()]  #选择不含NaN值的列
    
    # 通过isin选择
    df[(df.Country.isin(df2.Type))]  #选择为某一类型的数值
    df.filter(items=["a","b"])       #选择特定值
    df.select(lambda x: not x%5)     #选择指定元素
    
    # 通过where选择
    s.where(s>0)                     #选择子集
    
    # 通过Query选择
    df.query('second > first')       #查询DataFrame
    
    # 多重索引
    arrays = [np.array([1,2,3]),np.array([5,4,3])]
    df = pd.DataFrame(np.random.rand(3,2), index=arrays)
    tuples = list(zip(*arrays))
    index = pd.MultiIndex.from_tuples(tuples, names=['first','second'])
    df2 = pd.DataFrame(np.random.rand(3,2), index=index)
    df3.set_index(["Date","Type"])
    
    # 重复数据
    s3.unique()   #返回唯一值
    df.duplicated('Type')  #查找重复值
    df.drop_duplicates('Type', keep='last')   #去除重复值
    df.index.duplicated()   #查找重复索引
    
    • 数据操作
    # 数据分组
    df.groupby(by=['Date','Type']).mean()
    df.groupby(level=0).sum()
    df.groupby(level=0).agg({'a':lambda x:sum(x)/len(x), 'b':np.sum()})
    
    # 缺失值
    df.dropna()           #去除缺失值NaN
    df.fillna(df.mean)    #用预设值填充缺失值NaN
    df.replace('a', 'f')  #用一个值替换另一个值
    
    # 合并操作
    pd.merge(data1, data2, how='left', on='X1')
    
    # 连接操作
    data1.join(data2, how='right')
    
    # 拼接操作
    s.append(s2)    # 纵向
    # 横向/纵向
    pd.concat([s,s2], axis=1, keys=['One', 'Two'])
    pd.concat([data1, data2],axis=1, join='inner')
    
    
    • 日期操作
    df['Date'] = pd.to_datetime(df['Date'])
    df['Date'] = pd.date_range('2020-01-02', periods=6, freq='M')
    dates = [datetime(2012,5,1), datetime(2012,5,3)]
    index = pd.DatetimeIndex(dates)
    index = pd.date_range(datetime(2012,2,1), end, freq='BM') #BM是指的每个月的最后一个工作日
    

    相关文章

      网友评论

          本文标题:pandas学习

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