• Pandas 第一部分


      1 import numpy as np
      2 import pandas as pd
      3 
      4 #Pandas 的基本数据结构
      5 if 0:
      6 
      7     # 两种
      8     # Series
      9     if 0:
     10         #一维Series 可以用一维列表来初始化
     11         if 0:
     12             s = pd.Series([1,2,3,np.nan,4,5])
     13             print(s)
     14 
     15             s1 = pd.Series([1,2,3,np.nan,4,5],index=['a','b','c','d','e','f'])
     16             print(s1)
     17 
     18         #索引 - 数据的行标签
     19         if 0:
     20             s = pd.Series([1,2,3,np.nan,4,5])
     21             print(s.index)  #RangeIndex(start=0, stop=6, step=1)
     22 
     23         #
     24         if 0:
     25             s = pd.Series([1,2,3,np.nan,4,5])
     26             print(s.values)  #[ 1.  2.  3. nan  4.  5.]
     27             pass
     28 
     29         #切片操作
     30         if 0:
     31             s = pd.Series([1,2,3,np.nan,5,4])
     32             print(s[:-3])
     33 
     34             print(s[::2])
     35 
     36         #索引赋值
     37         if 0:
     38             s = pd.Series([1,2,3,np.nan,5,4])
     39             print(s)
     40             s.index.name = "idx"
     41             print(s)
     42 
     43             #可以通过index 直接修改索引的值
     44             s.index = list("abcdef")
     45             print(s)
     46             print(s[:3])  #照样可以使用
     47             print(s['a':'c'])  # 注,这里是包含‘c'
     48         pass
     49     # DataFrame
     50     if 1:
     51         #构造一个时间序列
     52         if 0:
     53             date  = pd.date_range('20190901',periods=60 )  #时间序列 60 天
     54             print(date)
     55         #创建一个dataframe 结构
     56         if 0:
     57             #使用一个二维数组来创建
     58             if 0:
     59                 df = pd.DataFrame(np.random.randn(3,4)) #3 行 4 列的正太分布二维数组传入
     60                 print(df)
     61 
     62                 date =pd.date_range('20190921',periods=3)
     63                 df2 = pd.DataFrame(np.random.randn(3,4),index=date  )
     64                 print(df2)
     65 
     66                 df3 = pd.DataFrame(np.random.randn(3,4),index=date,columns=list('ABCD'))
     67                 print(df3)
     68 
     69 
     70             #使用字典来创建
     71             if 0:
     72                 arr =np.array([4]*4)
     73                 print(arr) #[4 4 4 4]
     74             if 0:
     75                 #字典的每个key 代表一列,其value 可以是各种能转化为Series 的对象
     76                 #与series 要求不同,DataFrame 只要求每列数据类型相同
     77                 d = {"A":pd.date_range('20190921',periods=4),"B":pd.Timestamp('20190921'),"C":pd.Series(1,index=list("abcd")),'D':np.array([4]*4,dtype=float)}
     78                 df = pd.DataFrame(d)
     79                 print(df)
     80                 pass
     81 
     82         #查看数据
     83         if 1:
     84             df = pd.DataFrame({"date":pd.date_range("20190921",periods=15),"a":1,"b":pd.Series([4]*15,dtype=float)})
     85             #头尾数据
     86             if 0:
     87                 #head 和 tail方法 可以分别查看 前几行和后几行 默认是5
     88                 print(df)
     89                 print(df.head())
     90                 print(df.tail())
     91 
     92                 print(df.head(3))  #前3行
     93                 print(df.tail(3)) #后3行
     94 
     95                 pass
     96 
     97             #查看各个列的数据类型
     98             if 0:
     99                 print(df.dtypes)
    100                 pass
    101 
    102             #行标 列标 和数据
    103             if 0:
    104                 print(df.index)  #RangeIndex(start=0, stop=15, step=1)
    105                 print(df.columns)  #Index(['date', 'a', 'b'], dtype='object')
    106                 print(df.values)
    107 
    108 
    109 
    110 
    111             pass
    112         pass
    113 
    114     pass
    115 
    116 
    117 #Pandas 读取数据及数据操作
    118 if 1:
    119     #读取excel 数据文件
    120     if 0:
    121         #此时要注意 它依赖xlrd 包,所以要按照它
    122         df = pd.read_excel("d:/test.xlsx")
    123         print(df.head())
    124         print(df.tail())
    125         pass
    126 
    127     df = pd.read_excel("d:/test.xlsx")
    128     #行操作
    129     if 0:
    130         print(df.iloc[0])
    131         print(df.loc[0])
    132 
    133         #查看前五行
    134         print(df.iloc[:5])
    135         print(df.loc[:5])  # 它和iloc的区别是 它包含了右端
    136 
    137         pass
    138 
    139     #添加一行  #通过定义一个Series 然后append 到dataframe 中
    140     if 0:
    141         dit = {"学号":17096220,"姓名":"陈典","年龄":19}
    142         s = pd.Series(dit)
    143         s.name = "320"
    144         print(s)
    145         df = df.append(s)
    146         print(df[-5:])
    147 
    148         pass
    149 
    150     #删除一行
    151     if 0:
    152         print(df[-2:])
    153         df = df.drop([319])  #删除319 行
    154         print(df[-2:])
    155 
    156         df = df.drop([317,318])  #也可以同时删除多行
    157         print(df[-2:])
    158 
    159         pass
    160 
    161     #列操作
    162     if 0:
    163         print(df.columns)  #Index(['学号', '姓名', '年龄'], dtype='object')
    164         #取一列
    165         if 0:
    166             print(df['姓名'])  #查看全部的名字
    167 
    168             print(df['姓名'][:5])  #查看前5个名字
    169             print(df['姓名'][-5:])  #查看后5个名字
    170 
    171         #取多列
    172         if 0:
    173             print(df[['姓名','学号']][:5])  #取多列
    174             pass
    175 
    176         #增加一列
    177         if 0:
    178             df['序号'] = range(1,len(df)+1)
    179             print(df[-3:])
    180             pass
    181 
    182         #删除一列
    183         if 0:
    184             df = df.drop('学号',axis=1) #注意要加上axis =1   默认是操作的行axis = 0
    185             print(df[-5:])
    186 
    187             pass
    188 
    189         pass
    190 
    191     #通过标签选择数据
    192     if 0:
    193         #之前的df[]  选择的都是列数据,现在是通过标签选择数据
    194         #选择一行一列
    195         if 0:
    196             print(df.loc[1,'姓名'])  #选择出 标签为1 的姓名数据
    197             pass
    198         #选择多行多列
    199         if 0:
    200             print(df.loc[316:,'姓名':'年龄']) #选择初标签为 316 到最后的标签,列是姓名和年龄的
    201 
    202             print(df.loc[[1,2,5,310],['学号','姓名']])  #通过标签来选择数据
    203             pass
    204 
    205         pass
    206 
    207     #条件选择
    208     if 0:
    209         #选择姓名为张三的所有条目
    210         if 0:
    211             print( df['姓名'] == '张三')
    212             # print(df[df['姓名'] == '张三'])
    213             print(df[df['姓名'] == '张三'][:5])  #查看前5行
    214         #选择姓名为张三,且年龄大于100   的所有条目
    215         if 0:
    216             # print( df['姓名']=='张三' & df['年龄']>100)  #不对
    217             print( (df['姓名']=='张三') & (df['年龄']>100))  #多个条件要用()括起来  
    218             #上一行等价于下面一行
    219             # print( (df.姓名 == '张三' ) & (df.年龄 >100 ) )
    220 
    221             print(df[(df['姓名']=='张三') & (df['年龄']>100)])
    222         # 选择姓名为张三或者张昌博,且  年龄大于100 小于 150   的所有条目
    223         if 1:
    224             #基本形式   df [ (  () | () ) & (  () &()  )]
    225             # df.姓名 == '张三' df.姓名 == '张昌博'  df.年龄 >100 df.年龄<150
    226             print(df[ (  (df.姓名 == '张三') | (df.姓名 == '张昌博') ) &(  (df.年龄 >100)  &  (df.年龄<150)  ) ])
    227             pass
    228 
    229         pass
    230 
    231     #缺失值和异常值的处理
    232     if 1:
    233 
    234         #缺失值的处理方法
    235         if 0:
    236             #常用的方法:
    237             # 1,dropna  根据标签的缺失值进行过滤 ,删除缺失值
    238             # 2,fillna 对缺失值进行填充
    239             # 3,isnull 返回一个布尔值对象,判断那些值是缺失值
    240             # 4,notnull   isnull 的否定式
    241             pass
    242 
    243             #利用isnull 判断缺失值
    244             if 0:
    245                 # print( df.isnull())
    246                 print(df['姓名'].isnull())   #一般是判断某一类是否有缺失值
    247                 print(df[ df['姓名'].isnull()  ])
    248                 pass
    249 
    250             #填充缺失值
    251             if 0:
    252                 # 填充一般用于数值型 的
    253                 if 0:
    254                 #判断年龄是否有缺失值
    255                     print( df [ df['年龄'].isnull() ]  )
    256 
    257                     df['年龄'].fillna(0,inplace=True)  #填充为0
    258                                 #inplace 代表的是是否在原始数据中进行填充
    259                     print( df [ df['年龄'].isnull() ]  )
    260                 #填充非数值型的
    261                 if 1:
    262                     print(df [ df['姓名'].isnull() ] )
    263                     df['姓名'] = df['姓名'].fillna('未知姓名')
    264                     print(df['姓名'][164:] )
    265                     pass
    266 
    267 
    268                 pass
    269 
    270             #删除缺失值
    271             if 1:
    272                 # df.dropna() 参数:
    273                 # how ='all' 删除全为空值的行和列
    274                 # inplace= True  覆盖原有数据
    275                 # axis =0 选择要操作的维度
    276                 if 0:
    277                     print(len(df))
    278                     df2 = df.dropna()
    279                     print(len(df2))
    280 
    281                 print(len(df))
    282                 df2 = df.dropna(how='all')
    283                 print(len(df2))
    284 
    285                 pass
    286 
    287         #异常值的处理
    288         if 0:
    289             #异常值  例如 年龄为负数 等等.... 一般直接删除就好了
    290             print(df[df['年龄'] < 0 ])
    291             df = df[df['年龄'] >0 ]  #这样就将年龄小与 0  的给删除了
    292 
    293 
    294         pass
    295 
    296     #数据保存
    297     df.to_excel('d:/test02.xlsx')  #注意:如果要保存到excel  要pip 安装openpyxl  模块
    298     pass
    View Code
  • 相关阅读:
    中国马的跳法
    桃子到底有多少
    Precision power (高精度幂运算)(相乘的变体)
    判断两条线段是否相交
    大菲波数
    小数保留格式
    Java 注意事项
    KMP复习整理
    printf函数精讲
    再解 KMP(初学)
  • 原文地址:https://www.cnblogs.com/zach0812/p/11563338.html
Copyright © 2020-2023  润新知