zoukankan      html  css  js  c++  java
  • 3.5.1 pandas基础

    1.导入三方库

    import numpy as np
    import pandas as pd

    查看库的版本

    pd.__version__

     

    '1.0.5'

     

    2.数据文件的导入和导出

    1)xlsx文件

    shuju_xlsx = pd.read_excel('table.xlsx')
    shuju_xlsx2 = pd.read_excel('可视化图表案例数据.xlsx')
    shuju_xlsx4 = pd.read_excel('可视化图表案例数据.xlsx',sheet_name='条形图')

    2)csv文件

    shuju_csv = pd.read_csv('table.csv')

    3)txt文件

    shuju_txt = pd.read_table('table.txt')
    shuju_txt

     

     
    .dataframe tbody tr th {
      vertical-align: top;
    }

    .dataframe thead th {
      text-align: right;
    }

    </style>

     col1col2col3col4
    0 2 a 1.4 apple
    1 3 b 3.4 banana
    2 6 c 2.5 orange
    3 5 d 3.2 lemon

    </div>

     

    shuju_txt2 = pd.read_table('citydata.txt',sep='s+')

    3.基本数据结构

    1)Series 常用的属性有:值(values)、索引(index)、名字(name)、类型(dtype)

    se = pd.Series(np.random.randint(60,100,(8)),index=['s','e','q','b','a','s','h','t'],name='模拟学生成绩',dtype='int32')
    
    se

     

    s    69
    e    96
    q    74
    b    88
    a    66
    s    73
    h    97
    t    64
    Name: 模拟学生成绩, dtype: int32

     

    se['e']

     

    96

     

    se['s']

     

    s    69
    s    73
    Name: 模拟学生成绩, dtype: int32

     

    2)DataFrame

    a)创建DataFrame

    DF = pd.DataFrame({'字母':list('abcdefgh'),'编号':range(5,13),'分值':[1.3,1,3.6,4.6,18,9.1,11,11.111]},
                      index=list('一二三四五六七八'))
    
    DF

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     字母编号分值
    a 5 1.300
    b 6 1.000
    c 7 3.600
    d 8 4.600
    e 9 18.000
    f 10 9.100
    g 11 11.000
    h 12 11.111

    </div>

     

    b)从DataFrame中取出一列

    DF[['编号','分值']]

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值
    5 1.300
    6 1.000
    7 3.600
    8 4.600
    9 18.000
    10 9.100
    11 11.000
    12 11.111

    </div>

     

    c)修改行或列名

    修改列名

    DF.rename(columns={'asd':'字母','shuzi':'编号','带小数点的数据':'分值'})

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     字母编号分值
    a 5 1.300
    b 6 1.000
    c 7 3.600
    d 8 4.600
    e 9 18.000
    f 10 9.100
    g 11 11.000
    h 12 11.111

    </div>

     

    #1.与直接数据提供人或者数据导出者对接
    #2.1)让对方自行内部沟通,等待结果;2)尝试获取或切入对方的数据录入环节

    修改行名

    DF.rename(index={'一':'numberone'},inplace=True)
    
    DF

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     字母编号分值
    numberone a 5 1.300
    b 6 1.000
    c 7 3.600
    d 8 4.600
    e 9 18.000
    f 10 9.100
    g 11 11.000
    h 12 11.111

    </div>

     

    d)调用属性和方法

    DF.values

     

    array([['a', 5, 1.3],
           ['b', 6, 1.0],
           ['c', 7, 3.6],
           ['d', 8, 4.6],
           ['e', 9, 18.0],
           ['f', 10, 9.1],
           ['g', 11, 11.0],
           ['h', 12, 11.111]], dtype=object)

     

    DF.index

     

    Index(['numberone', '二', '三', '四', '五', '六', '七', '八'], dtype='object')

     

    DF.columns

     

    Index(['字母', '编号', '分值'], dtype='object')

     

    e)列的删除和添加

    列的删除

    DF.drop(index='五',columns='字母') #使用参数inplace=True才会在DataFrame中生效

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值
    numberone 5 1.300
    6 1.000
    7 3.600
    8 4.600
    10 9.100
    11 11.000
    12 11.111

    </div>

     

    del DF['字母'] #执行后改动就会生效
    DF

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值
    numberone 5 1.300
    6 1.000
    7 3.600
    8 4.600
    9 18.000
    10 9.100
    11 11.000
    12 11.111

    </div>

     

    列的添加

    DF

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值
    numberone 5 1.300
    6 1.000
    7 3.600
    8 4.600
    9 18.000
    10 9.100
    11 11.000
    12 11.111

    </div>

     

    DF['添加的列'] = DF['编号'] + DF['分值']
    DF

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值添加的列
    numberone 5 1.300 6.300
    6 1.000 7.000
    7 3.600 10.600
    8 4.600 12.600
    9 18.000 27.000
    10 9.100 19.100
    11 11.000 22.000
    12 11.111 23.111

    </div>

     

    f)根据类型选择列

    DF.select_dtypes(include=['number'])

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     编号分值添加的列
    numberone 5 1.300 6.300
    6 1.000 7.000
    7 3.600 10.600
    8 4.600 12.600
    9 18.000 27.000
    10 9.100 19.100
    11 11.000 22.000
    12 11.111 23.111

    </div>

     

    DF.select_dtypes(include=['object'])

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     
    numberone

    </div>

     

    4.常用基本函数

    导入数据文件

    csv_shuju = pd.read_csv('table.csv')

    a)head和tail

    csv_shuju.head()

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     SchoolClassIDGenderAddressHeightWeightMathPhysics
    0 S_1 C_1 1101 M street_1 173 63 34.0 A+
    1 S_1 C_1 1102 F street_2 192 73 32.5 B+
    2 S_1 C_1 1103 M street_2 186 82 87.2 B+
    3 S_1 C_1 1104 F street_2 167 81 80.4 B-
    4 S_1 C_1 1105 F street_4 159 64 84.8 B+

    </div>

     

    csv_shuju.rename(columns={'School':'学校','Class':'班级','ID':'学生ID','Gender':'性别',
                              'Address':'地址','Height':'身高','Weight':'体重','Math':'数学成绩','Physics':'物理成绩'},inplace=True)
    csv_shuju.head(1) #默认显示5行

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学校班级学生ID性别地址身高体重数学成绩物理成绩
    0 S_1 C_1 1101 M street_1 173 63 34.0 A+

    </div>

     

    csv_shuju.tail(2) #默认显示5行

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学校班级学生ID性别地址身高体重数学成绩物理成绩
    33 S_2 C_4 2404 F street_2 160 84 67.7 B
    34 S_2 C_4 2405 F street_6 193 54 47.6 B

    </div>

     

    b)unique和nunique

    csv_shuju['性别'].nunique() #nunique显示该字段里有多少个唯一值

     

    2

     

    csv_shuju['性别'].unique() #unique显示该字段里所有的唯一值

     

    array(['M', 'F'], dtype=object)

     

    c)count和value_counts

    csv_shuju['地址'].count() #返回非缺失值元素的个数

     

    35

     

    csv_shuju['物理成绩'].value_counts() #返回每个元素的频数(有多少个)
    #不太适合交易额、销量、分值

     

    B+    9
    B     8
    B-    6
    A     4
    A-    3
    A+    3
    C     2
    Name: 物理成绩, dtype: int64

     

    d)info和describe

    csv_shuju.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 35 entries, 0 to 34
    Data columns (total 9 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   学校      35 non-null     object 
     1   班级      35 non-null     object 
     2   学生ID    35 non-null     int64  
     3   性别      35 non-null     object 
     4   地址      35 non-null     object 
     5   身高      35 non-null     int64  
     6   体重      35 non-null     int64  
     7   数学成绩    35 non-null     float64
     8   物理成绩    35 non-null     object 
    dtypes: float64(1), int64(3), object(5)
    memory usage: 2.6+ KB

     

    csv_shuju.describe() #统计数值型数据的各个统计量

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学生ID身高体重数学成绩
    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

    </div>

     

    csv_shuju.describe(percentiles=[.05,.25,.75,.95])

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学生ID身高体重数学成绩
    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
    5% 1102.70000 157.000000 56.100000 32.640000
    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
    95% 2403.30000 193.300000 97.600000 90.040000
    max 2405.00000 195.000000 100.000000 97.000000

    </div>

     

    csv_shuju['物理成绩'].describe()

     

    count     35
    unique     7
    top       B+
    freq       9
    Name: 物理成绩, dtype: object

     

    e)idxmax和nlargest

    idxmax

    csv_shuju['数学成绩'].idxmax() #返回最大值所在行的索引

     

    5

     

    csv_shuju[5:9]

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学校班级学生ID性别地址身高体重数学成绩物理成绩
    5 S_1 C_2 1201 M street_5 188 68 97.0 A-
    6 S_1 C_2 1202 F street_4 176 94 63.5 B-
    7 S_1 C_2 1203 M street_6 160 53 58.8 A+
    8 S_1 C_2 1204 F street_5 162 63 33.8 B

    </div>

     

    csv_shuju['数学成绩'].idxmin() #返回最小值所在行的索引

     

    10

     

    csv_shuju[10:20]

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学校班级学生ID性别地址身高体重数学成绩物理成绩
    10 S_1 C_3 1301 M street_4 161 68 31.5 B+
    11 S_1 C_3 1302 F street_1 175 57 87.7 A-
    12 S_1 C_3 1303 M street_7 188 82 49.7 B
    13 S_1 C_3 1304 M street_2 195 70 85.2 A
    14 S_1 C_3 1305 F street_5 187 69 61.7 B-
    15 S_2 C_1 2101 M street_7 174 84 83.3 C
    16 S_2 C_1 2102 F street_6 161 61 50.6 B+
    17 S_2 C_1 2103 M street_4 157 61 52.5 B-
    18 S_2 C_1 2104 F street_5 159 97 72.2 B+
    19 S_2 C_1 2105 M street_4 170 81 34.2 A

    </div>

     

    nlargest

    csv_shuju['数学成绩'].nlargest() #返回前几个大的元素值及其索引

     

    5     97.0
    28    95.5
    11    87.7
    2     87.2
    24    85.4
    Name: 数学成绩, dtype: float64

     

    csv_shuju['数学成绩'].nsmallest() #返回前几个小的元素值及其索引

     

    10    31.5
    1     32.5
    26    32.7
    8     33.8
    0     34.0
    Name: 数学成绩, dtype: float64

     

    e)clip和replace

    clip:对超过或低于指定值的数据进行截取

    csv_shuju['数学成绩'].clip(31,50).head()

     

    0    34.0
    1    32.5
    2    50.0
    3    50.0
    4    50.0
    Name: 数学成绩, dtype: float64

     

    replace:对指定值进行替换

    csv_shuju['地址'].replace(['street_1','street_2','street_4'],['one','two','fouth'],inplace=True)
    csv_shuju.head(10)

     

     
    .dataframe tbody tr th {
        vertical-align: top;
    }
    
    .dataframe thead th {
        text-align: right;
    }

    </style>

     学校班级学生ID性别地址身高体重数学成绩物理成绩
    0 S_1 C_1 1101 M one 173 63 34.0 A+
    1 S_1 C_1 1102 F two 192 73 32.5 B+
    2 S_1 C_1 1103 M two 186 82 87.2 B+
    3 S_1 C_1 1104 F two 167 81 80.4 B-
    4 S_1 C_1 1105 F fouth 159 64 84.8 B+
    5 S_1 C_2 1201 M street_5 188 68 97.0 A-
    6 S_1 C_2 1202 F fouth 176 94 63.5 B-
    7 S_1 C_2 1203 M street_6 160 53 58.8 A+
    8 S_1 C_2 1204 F street_5 162 63 33.8 B
    9 S_1 C_2 1205 F street_6 167 63 68.4 B-

    </div>

     

    小石小石摩西摩西的学习笔记,欢迎提问,欢迎指正!!!
  • 相关阅读:
    用python爬虫抓站的一些技巧总结
    使用python爬虫抓站的一些技巧总结:进阶篇
    Python模块学习:threading 多线程控制和处理
    Redis操作命令总结
    Redis介绍
    linux内核设计与实现笔记 进程调度
    Python常见数据结构整理
    Linux进程调度原理
    Python yield
    Qt之布局管理器
  • 原文地址:https://www.cnblogs.com/shijingwen/p/13700482.html
Copyright © 2011-2022 走看看