VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • 数据分析 Pandas 简介和它的的数据结构

本文主要讲Pandas 的Series和DataFrame 的相关属性和操作
1、Series的相关属性和操作
#        --Series是一种类似于一维数组的对象,只能存放一维数组!由以下两部分组成:
#              value:一组数据 ndarray类型
#              index:相关数据的索引标签
#
#        --Series 的创建:
#               (1)由列表或numpy数组创建:默认索引为0到n-1的整数索引,
#               (2)还可以通过index的参数指定索引

1.2、Series的索引和切片操作如下:    
1
2
3
4
5
6
7
8
9
10
11
12
13
import pandas as pd
from pandas import Series,DataFrame
# 创建一个Series,index=['a','b','c']为显示索引:增强可读性
s = Series(data=[1,2,3],index=['a','b','c'])
#索引的使用:下面三种方式都可以
print(s.a)
print(s[0])
print(s['a'])
#----Series 的切片
print(s[0:1])    # --- 这种索引切片是不包含1的值的
print(s['a':'b'])
print(s[[0,1]])
print(s[['a','b']])
1.3、Series 的相关函数及其特性 
          s.head(n)      查看前面n个值
          s.tail(n)         分别查看后面n个值

      s.unique()   ---对Series a元素进行去重----
1
2
3
s = Series([1,1,3,5,7,7,9,45,65])
ns = s.unique()     # ns 为  [1,3,5,7,9,45,65]
print(ns)
          Series加法运算: 两个Series 数组必须索引相同才能相加成功,不然就会出现缺失数据 NaN 的情况
1
2
3
4
5
6
7
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','d','c'])
s = s1 + s2
print(s)              # s的结果: a 2.0
                                # b NaN
                                # c 6.0
                                # d NaN

        Series的索引可以为True/False:
             print(s[[True,False,True,False]])  # ---  发现:如果索引为 False 时,值不显示

             s.isnull()     # --- 判断s中每个元素是否为NaN ,等于NaN返回True
             s.notnull()    # --- 判断s中每个元素是否不为NaN ,不等于NaN返回True

       #---批量过滤NaN值----------
       print(s[s.notnull()])        # s.notnull()返回的 True/False 数组,作为 s[]的索引 
----------------------------------------------------------------------------------------------------------
2、DataFrame 的相关属性和操作
         ---定义:DataFrame 是一个表格,二维的数据结构
         ---DataFrame == mydql的table
         ---设计初衷:将Series 的一维数据结构扩展到多维

         ---DataFrame 既有行索引,还有列索引
                   行索引:index          DataFrame会自动在每一行加上索引
                   列索引:columns        使用字典创建DataFrame后,columns参数将不可被使用
                   值:values             同Series 一样 传入的列与字典的键不匹配,则相应的值为NaN

       ---创建 DataFrame
1
2
3
4
5
6
7
import numpy as np
df = DataFrame(data = np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D'])
print(df)
#        A   B   C   D
#    a  45  63  88  52
#    b  74   4  56  35
#    c  58  22  14  25

 2.2、DataFrame 的属性 :index    columns    values    shape

        print('返回所有的值(3行4列)',df.values)
        print('返回列索引',df.columns)
        print('返回行索引',df.index)

      使用 ndarray 创建 DataFrame:创建一个表格用于展现张三李四的java/python 成绩:
1
2
3
4
5
6
data ={
    '张三':[120,120,120],
    '李四':[22,34,34]
}
df = DataFrame(data= data,index=['语文','英语','数学']) 
print(df)

  ---        张三 李四
  ---语文 120   22
  ---英语 120   34
  ---数学 120   34

2.3、使用DataFrame 的索引操作
         (1)、对列进行索引>>>>默认列索引
1
2
3
4
5
6
7
8
9
10
11
print(df['张三'])
#语文 120
#英语 120
#数学 120
#Name: 张三, dtype: int64
 
print(df[['李四','张三']])   # --- 取两列,index取多列要加“[]”
#李四 张三
#语文 22 120
#英语 34 120
#数学 34 120  
        (2)、对行进行索引
               使用df.loc[]加index进行索引  --隐式索引
               使用df.iloc[]加整数进行索引  --显式索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
print('使用df.loc[]加index进行索引',df.loc['语文'])
#使用df.loc[]加index进行索引
#张三 120
#李四 22
Name: 语文, dtype: int64
 
print('使用df.loc[]取多行',df.loc[['语文','英语']])  # --- 取两行,index取多行要加“[]”
#使用df.loc[]取多行
#张三 李四
#语文 120 22
#英语 120 34
 
print('使用df.iloc[]加整数进行索引',df.iloc[0])
#使用df.iloc[]加整数进行索引
#张三   120
#李四   22
Name: 语文, dtype: int64
 
print('使用df.iloc[]取多行',df.iloc[[0,1]])  # --- 取两行,index取多行要加“[]”
#使用df.iloc[]取多行
#    张三    李四
#语文 120    22
#英语 120    34 
        (3)、对元素进行索引
                默认df['张三']第一个索引为列索引,第二个为行索引
                loc[] 第一个为行索引,第二个为列索引
1
2
3
4
5
6
7
8
print('对元素进行索引',df['张三']['语文']) 
#对元素进行索引 120
 
print('使用df.loc[]对元素索引',df.loc['英语']['张三'])
#使用df.loc[]对元素索引 120
 
print('同上写法',df.loc['英语','张三']) 
#同上写法 120

      (4)、取多个元素

              “,”左边为行,右边为列

1
2
3
4
5
6
print('使用df.loc[]取多个元素',df.loc[['英语','语文'],'张三'])
#使用df.loc[]取多个元素
 
#英语 120
#语文 120
#Name: 张三, dtype: int64

   2.4、DataFrame 的切片操作            

  • 行切片: df[0:2]切片默认取得是行
1
2
3
4
print(df[0:2])
#    张三  李四
#语文 120  22
#英语 120  34
1
print(df[2])  ---取第二列
  • 切片 iloc : “,”左边为行,右边为列

          不加 “,” 默认取得是行

1
2
3
4
5
6
7
8
9
10
print(df.iloc[0]) --取第一行
print(df.iloc[-1])--取最后一行
print(df.iloc[0:2]) --取的是第一第二行
print(df.iloc[:,0:1])  --取第一列
print(df.iloc[2,3])   --取第二行第三列的数据
print(df.iloc[2,1:3])   --取索引未2的行第索引13的列
#       张三
# 语文   120
# 英语   120
# 数学   120

 2.5、DataFrame 的运算操作 

             DataFrame 的运算和Series 一样:

                          在运算中自动对齐索引相同的数据

                          如果索引不对应就补NaN

重要:
      使用python操作符:以行为单位操作(参数必须是行),对所有行都有效。


使用pandas操作函数:

  •  axis = 0 以列为单位操作(参数必须是列),对所有列都有效
  •  axis = 1 以行为单位操作(参数必须是行),对所有行都有效
  •  注意:fill_value在df和series之间运算时,不能使用

练习:

1、假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。

2、假设张三期中考试数学被发现作弊,要记为0分,如何实现?

3、李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?

4、后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

1
2
3
4
5
6
7
8
df1 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"])
df2 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"])
display(df1, df2)
 
1.(df1 + df2)/2
2.df1.loc["B","java"] = 0
3.df1.loc["C"] += 100
4.df1 += 10


 
转载自:https://www.cnblogs.com/aitree/p/14278998.html

相关教程