pandas

1. 带标签的Series

  1.  
    import pandas as pd
  2.  
    import numpy as np
  3.  
     
  4.  
    # Series
  5.  
     
  6.  
    s = pd.Series([1,3,6,np.nan,44,1])
  7.  
    print(s)
  8.  
     
  9.  
    s = pd.Series([1,3,6,np.nan,44,1],index=[3,4,3,7,8,9])
  10.  
    print(s)
  11.  
     
  12.  
    # 默认index从0开始,如果想要按照自己的索引设置,则修改index参数,如:index=[3,4,3,7,8,9]

2. 构建DataFrame

  1.  
    dates = pd.date_range('2018-08-19',periods=6)
  2.  
     
  3.  
    df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
  4.  
    print(df)
  5.  
     
  6.  
    # dates = pd.date_range('2018-08-19',periods=6) 与 dates = pd.date_range('2018-08-19','2018-08-24')等价,第二种方法直接表示起始、结束。
  7.  
    # numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。
  8.  
    # numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。
  9.  
    # (6,4)表示6行4列数据
  10.  
    # DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典。
  1.  
    print(df['b'])
  2.  
     
  3.  
    # 打印b列数据,其中包括了行索引
  1.  
    df1 = pd.DataFrame(np.arange(12).reshape(3,4))
  2.  
    print(df1)
  3.  
     
  4.  
    # 未指定行标签和列标签的数据时,默认行、列标签为从0开始的数字索引。
  1.  
    df2 = pd.DataFrame({
  2.  
    'A': [1,2,3,4],
  3.  
    'B': pd.Timestamp('20180819'),
  4.  
    'C': pd.Series([1,6,9,10],dtype='float32'),
  5.  
    'D': np.array([3] * 4,dtype='int32'),
  6.  
    'E': pd.Categorical(['test','train','test','train']),
  7.  
    'F': 'foo'
  8.  
    })
  9.  
    print(df2)
  10.  
     
  11.  
    # 这是另一种方式表示DataFrame
  12.  
    # .Timestamp获得时间戳,这里有隐藏的时间戳,因为显示长度不够,所以部分被隐藏了
  13.  
    # [3] * 4 表示数组中有3个4,与[3,3,3,3]等价
  1.  
    print(df2.index)
  2.  
     
  3.  
    # 打印df2的行索引
  1.  
    print(df2.columns)
  2.  
     
  3.  
    # 打印df2的列索引
  1.  
    print(df2.values)
  2.  
     
  3.  
    # 打印df2中的值
  1.  
    print(df2.describe())
  2.  
     
  3.  
    # 将df2中的数据(这里只有A、C、D列)总结,总结它们的不重复值、平均值、标准差....
  1.  
    df2.T
  2.  
     
  3.  
    # 翻转数据
  4.  
    # print(np.transpose(df2))等价于上述操作
  1.  
    print(df2.sort_index(axis=1,ascending=True))
  2.  
     
  3.  
    print(df2.sort_index(axis=1,ascending=False))
  4.  
     
  5.  
    # axis=1表示行,axis=0表示列。
  6.  
    # ascending=True表示升序,ascending=False表示降序,默认ascending(升序)为True
  7.  
    # 上面两行分别表示按行升序与按行降序
  1.  
    print(df2.sort_index(axis=0,ascending=False))
  2.  
    print(df2.sort_index(axis=0,ascending=True))
  3.  
     
  4.  
    # 表示按列降序与按列升序
  1.  
    print(df2.sort_values(by='C',ascending=False))
  2.  
     
  3.  
    # 对特定列数值排列
  4.  
    # 表示对C列降序排列

3. Pandas选择数据

  1.  
    import pandas as pd
  2.  
    import numpy as np
  3.  
    dates = pd.date_range('20180819', periods=6)
  4.  
    df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
  5.  
    print(df)
  1.  
    print(df['A'])
  2.  
     
  3.  
    # 检索A列
  1.  
    print(df.A)
  2.  
     
  3.  
    # 第二种方法,检索A列
  1.  
    print(df[0:3])
  2.  
     
  3.  
    # 选择跨越多行或多列
  4.  
    # 选取前3行
  1.  
    print(df['2018-08-19':'2018-08-21'])
  2.  
     
  3.  
    # 打印第2018-08-19到2018-08-21行之间的数据
  1.  
    print(df.loc['20180819'])
  2.  
     
  3.  
    # 根据标签选择数据
  4.  
    # 获取特定行或列
  5.  
    # 指定行数据
  1.  
    print(df.loc[:,'A':'B'])
  2.  
     
  3.  
    # 指定列,这里前面的第一个:表示未指定行,所以打印全部的行
  1.  
    print(df.loc[:,['A','B']])
  2.  
     
  3.  
    # 第二种方式,指定列。
  1.  
    print(df.loc['20180819',['A','B']])
  2.  
     
  3.  
    # 行与列同时检索
  1.  
    print(df.iloc[3,1])
  2.  
     
  3.  
    # 根据序列iloc
  4.  
    # 获取特定位置的值
  1.  
    print(df.iloc[3:5,1:3])
  2.  
     
  3.  
    # 不包含末尾5或3,同列表切片
  1.  
    print(df.iloc[[1,4],1:3])
  2.  
     
  3.  
    # 打印第1行和第4行,第1列至第3列
  1.  
    print(df.iloc[[1,2,3],1:3])
  2.  
     
  3.  
    # 打印第1行和第4行以及中间的行,步长为2-1,第1列至第3列
  1.  
    print(df.ix[:3,['A','C']])
  2.  
     
  3.  
    # 混合选择,这里的提示说.ix被删除了,建议使用.loc和.iloc
  1.  
    print(df.iloc[:3,[0,2]])
  2.  
     
  3.  
    # 结果同上
  1.  
    print(df[df.A>8])
  2.  
     
  3.  
    # 通过判断的筛选,A列中大于8的数据为True,再打印这些行
  1.  
    print(df.loc[df.A>8])
  2.  
     
  3.  
    # 第二种方法,通过判断的筛选
  1.  
    print(df.loc['20180819','A':'B'])
  2.  
    print(df.iloc[0,0:2])
  3.  
    print(df.ix[0,'A':'B'])
  4.  
     
  5.  
    # 这三种操作,输出结果相同

4. 创建数据

  1.  
    import pandas as pd
  2.  
    import numpy as np
  3.  
     
  4.  
    dates = pd.date_range('20180820',periods=6)
  5.  
    df = pd.DataFrame(np.arange(24).reshape(6,4), index=dates, columns=['A','B','C','D'])
  6.  
    print(df)
  7.  
     
  8.  
    # 创建数据
  1.  
    df.iloc[2,2] = 111
  2.  
    df.loc['20180820','B'] = 2222
  3.  
    print(df)
  4.  
     
  5.  
    # 根据位置设置loc和iloc
  1.  
    df.B[df.A>4] = 0
  2.  
    print(df)
  3.  
     
  4.  
    # 根据条件设置
  5.  
    # 更改B中的数,而更改的位置取决于4的位置,当A列中的元素大于4的时候,将B列相应位置的数设置为0
  1.  
    df.B.loc[df.A>4] = 0
  2.  
    print(df)
  3.  
     
  4.  
    # 第二种方法
  1.  
    df['F'] = np.nan
  2.  
    print(df)
  3.  
     
  4.  
    # 按行或列设置
  5.  
    # 列批处理,F列全改为NaN
  1.  
    df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180820',periods=6))
  2.  
    print(df)
  3.  
     
  4.  
    # 添加Series序列(长度必须对齐)
  1.  
    df.ix['20180820','A'] = 56
  2.  
    print(df)
  3.  
     
  4.  
    # 设定某行某列为特定值
  5.  
    #ix 以后要剥离了,尽量不要用了
  1.  
    df.loc['20180820','A'] = 67
  2.  
    print(df)
  3.  
     
  4.  
    # 第二种方法
  1.  
    df.iloc[0,0] = 76
  2.  
    print(df)
  3.  
     
  4.  
    # 第三种方法
  1.  
    df.iloc[1] = np.nan # df.iloc[1,:]=np.nan
  2.  
    print(df)
  3.  
     
  4.  
    # df.iloc[1]相当于df.iloc[1,:]=np.nan,修改一整行数据
  1.  
    df.loc['20180820'] = np.nan # df.loc['20180820,:']=np.nan
  2.  
    print(df)
  3.  
     
  4.  
    # df.loc['20180820'] = np.nan 相当于 df.loc['20180820,:']=np.nan
  1.  
    df.ix[2] = np.nan
  2.  
    print(df)
  3.  
     
  4.  
    # df.ix[2] = np.nan 相当于 df.ix[2,:]=np.nan
  1.  
    df.ix['20180823'] = np.nan
  2.  
    print(df)
  3.  
     
  4.  
    # 第四种方法
posted @   shclbear  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示