• 数据分析可视化pandas


    Series

    import pandas as pd
    
    • 1
    obj=pd.Series([1,2,-3,-4])
    print(obj)
    
    • 1
    • 2

    0 1
    1 2
    2 -3
    3 -4
    dtype: int64

    i=["a","c","d","a"]
    v=[2,4,5,7]
    t=pd.Series(data=v,index=i,name="col")
    print(t)
    
    • 1
    • 2
    • 3
    • 4

    a 2
    c 4
    d 5
    a 7
    Name: col, dtype: int64

    val = [2, 4, 5, 6]
    idx1 = range(10, 14)
    idx2 = "hello the cruel world".split()
    s0 = pd.Series(val)
    s1 = pd.Series(val, index = idx1)
    t = pd.Series(val, index = idx2)
    print(s0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    0 2
    1 4
    2 5
    3 6
    dtype: int64

    print(s1)
    
    • 1

    10 2
    11 4
    12 5
    13 6
    dtype: int64

    print(t)
    
    • 1

    hello 2
    the 4
    cruel 5
    world 6
    dtype: int64

    print(s0.index)
    
    • 1

    RangeIndex(start=0, stop=4, step=1)

    print(s1.index)
    
    • 1

    RangeIndex(start=10, stop=14, step=1)

    print(t.index)
    
    • 1

    Index([‘hello’, ‘the’, ‘cruel’, ‘world’], dtype=‘object’)

    print(s0[0])
    
    • 1

    2

    print(s1[10])
    
    • 1

    2

    print('default:',t[0],'label:' ,t["hello"])
    
    • 1

    default: 2 label: 2

    sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
    obj3 = pd.Series(sdata)
    print(obj3)
    
    • 1
    • 2
    • 3

    Ohio 35000
    Texas 71000
    Oregon 16000
    Utah 5000
    dtype: int64

    通过字典创建

    sdata = {"a" : 100, "b" : 200, "e" : 300}
    letter = ["a","b","c","e" ]
    obj =  pd.Series(sdata, index = letter)
    print(obj)
    
    • 1
    • 2
    • 3
    • 4

    a 100.0
    b 200.0
    c NaN
    e 300.0
    dtype: float64

    键值和指定的索引不匹配
    sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
    obj1 = pd.Series(sdata)
    states = ['California', 'Ohio', 'Oregon', 'Texas']
    obj2 = pd.Series(sdata, index = states)
    print('obj1:\n',obj1)
    print('obj2:\n',obj2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    obj1:
    Ohio 35000
    Texas 71000
    Oregon 16000
    Utah 5000
    dtype: int64
    obj2:
    California NaN
    Ohio 35000.0
    Oregon 16000.0
    Texas 71000.0
    dtype: float64

    不同索引数据的自动对齐
    print(obj1+obj2)
    
    • 1

    California NaN
    Ohio 70000.0
    Oregon 32000.0
    Texas 142000.0
    Utah NaN
    dtype: float64

    Series 索引的修改
    obj = pd.Series([4,7,-3,2])
    print("修改前:\n",obj)
    obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
    print("修改后:\n",obj)
    
    • 1
    • 2
    • 3
    • 4

    修改前:
    0 4
    1 7
    2 -3
    3 2
    dtype: int64
    修改后:
    Bob 4
    Steve 7
    Jeff -3
    Ryan 2
    dtype: int64

    dataFrame

    dataFrame 的创建
    data = {
        'name':['张三', '李四', '王五', '小明'],
        'sex':['female', 'female', 'male', 'male'],
        'year':[2001, 2001, 2003, 2002],
        'city':['北京', '上海', '广州', '北京']
    }
    df=pd.DataFrame(data)
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    name sex year city
    0 张三 female 2001 北京
    1 李四 female 2001 上海
    2 王五 male 2003 广州
    3 小明 male 2002 北京

    索引
    df1=pd.DataFrame(data,columns=['year','name','sex','city'])
    print(df1)
    
    • 1
    • 2

    .
    . year name sex city
    0 2001 张三 female 北京
    1 2001 李四 female 上海
    2 2003 王五 male 广州
    3 2002 小明 male 北京

    缺失值
    df2=pd.DataFrame(data,columns=['year','name','sex','city','address'])
    print(df2)
    
    • 1
    • 2

    .
    . year name sex city address
    0 2001 张三 female 北京 NaN
    1 2001 李四 female 上海 NaN
    2 2003 王五 male 广州 NaN
    3 2002 小明 male 北京 NaN

    指定列名
    df3=pd.DataFrame(data,columns=['year','name','sex','city'],index=['a','b','c','d'])
    print(df3)
    
    • 1
    • 2

    .
    . year name sex city
    a 2001 张三 female 北京
    b 2001 李四 female 上海
    c 2003 王五 male 广州
    d 2002 小明 male 北京

    索引对象 属性

    print(df3)
    print(df3.index)
    print(df3.columns)
    
    • 1
    • 2
    • 3

    .
    . year name sex city
    a 2001 张三 female 北京
    b 2001 李四 female 上海
    c 2003 王五 male 广州
    d 2002 小明 male 北京
    Index([‘a’, ‘b’, ‘c’, ‘d’], dtype=‘object’)
    Index([‘year’, ‘name’, ‘sex’, ‘city’], dtype=‘object’)

    print('name' in df3.columns)
    print('a' in df3.index)
    
    • 1
    • 2

    True
    True

    print(df3.shape)
    
    • 1

    (4, 4)

    print(df3.ndim)
    
    • 1

    2

    print(df3.size)
    
    • 1

    16

    print(df3.values)
    
    • 1

    [[2001 ‘张三’ ‘female’ ‘北京’]
    [2001 ‘李四’ ‘female’ ‘上海’]
    [2003 ‘王五’ ‘male’ ‘广州’]
    [2002 ‘小明’ ‘male’ ‘北京’]]

    df
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    插入索引值
    df.index
    
    • 1

    RangeIndex(start=0, stop=4, step=1)

    df.index.insert(1,'w')
    
    • 1

    Index([0, ‘w’, 1, 2, 3], dtype=‘object’)

    索引操作

    重建索引

    obj = pd.Series([7.2,-4.3,4.5,3.6],index = ['b', 'a', 'd', 'c'])
    print(obj)
    
    • 1
    • 2

    b 7.2
    a -4.3
    d 4.5
    c 3.6
    dtype: float64

    # 重建索引
    obj.reindex(['a','b','c','d','e'])
    
    • 1
    • 2

    a -4.3
    b 7.2
    c 3.6
    d 4.5
    e NaN
    dtype: float64

    # 重建索引时填充缺失值
    obj.reindex(['a','b','c','d','e'],fill_value=4)
    
    • 1
    • 2

    a -4.3
    b 7.2
    c 3.6
    d 4.5
    e 4.0
    dtype: float64

    import numpy as np
    obj1=pd.Series(['blue','red','black'],index=[0,2,4])
    obj1
    
    • 1
    • 2
    • 3

    0 blue
    2 red
    4 black
    dtype: object

    obj1.reindex(np.arange(6))
    
    • 1

    0 blue
    1 NaN
    2 red
    3 NaN
    4 black
    5 NaN
    dtype: object

    obj1.reindex(np.arange(6),method='ffill')
    
    • 1

    0 blue
    1 blue
    2 red
    3 red
    4 black
    5 black
    dtype: object

    obj1.reindex(np.arange(6),method='bfill')
    
    • 1

    0 blue
    1 red
    2 red
    3 black
    4 black
    5 NaN
    dtype: object

    df4=pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['one','two','four'])
    df4
    
    • 1
    • 2
    onetwofour
    a012
    c345
    d678
    print(df4)
    
    • 1

    .one two four
    a 0 1 2
    c 3 4 5
    d 6 7 8

    df4.reindex(index=['a','b','c','d'],columns=['one','two','three','four'])
    
    • 1
    onetwothreefour
    a0.01.0NaN2.0
    bNaNNaNNaNNaN
    c3.04.0NaN5.0
    d6.07.0NaN8.0
    df4.reindex(index=['a','b','c','d'],columns=['one','two','three','four'],fill_value=3)
    
    • 1
    onetwothreefour
    a0132
    b3333
    c3435
    d6738
    df4
    
    • 1
    onetwofour
    a012
    c345
    d678
    df4.reindex(index=['a','b','c','d'],method='ffill')
    
    • 1
    onetwofour
    a012
    b012
    c345
    d678
    df4.reindex(index=['a','b','c','d'],method='bfill')
    
    • 1
    onetwofour
    a012
    b345
    c345
    d678
    df1
    
    • 1
    yearnamesexcity
    02001张三female北京
    12001李四female上海
    22003王五male广州
    32002小明male北京
    df5=df1.set_index('city')# 索引为city
    df5
    
    • 1
    • 2
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    广州2003王五male
    北京2002小明male
    df5.reset_index()
    
    • 1
    cityyearnamesex
    0北京2001张三female
    1上海2001李四female
    2广州2003王五male
    3北京2002小明male
    df1
    
    • 1
    yearnamesexcity
    02001张三female北京
    12001李四female上海
    22003王五male广州
    32002小明male北京
    df5
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    广州2003王五male
    北京2002小明male
    df5[['name','year']]
    
    • 1
    nameyear
    city
    北京张三2001
    上海李四2001
    广州王五2003
    北京小明2002
    # 选择非‘int64’类型的列显示
    display(df5.select_dtypes(exclude='int64').head())
    
    
    • 1
    • 2
    • 3
    namesex
    city
    北京张三female
    上海李四female
    广州王五male
    北京小明male
    # 选择‘int64’类型的列显示
    df5.select_dtypes(include=['int64']).head()
    
    • 1
    • 2
    year
    city
    北京2001
    上海2001
    广州2003
    北京2002
    # 选择‘int64’类型的列显示
    df5.select_dtypes(include=['int64']).head(3)
    
    • 1
    • 2
    year
    city
    北京2001
    上海2001
    广州2003
    df
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    df[:2]
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    df[1:3]
    
    • 1
    namesexyearcity
    1李四female2001上海
    2王五male2003广州
    df[1:]
    
    • 1
    namesexyearcity
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    df.head(3) # head(3)前3行
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    2王五male2003广州
    df.head()  # head() 前5行
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    df.tail(3)
    
    • 1
    namesexyearcity
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    df.sample(3)
    
    • 1
    namesexyearcity
    2王五male2003广州
    1李四female2001上海
    3小明male2002北京
    df.sample(frac=0.8) # 前80%行
    
    • 1
    namesexyearcity
    0张三female2001北京
    3小明male2002北京
    1李四female2001上海
    df5
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    广州2003王五male
    北京2002小明male
    # .loc根据行和列筛选
    df5.loc[:,['name','year']]  
    
    • 1
    • 2
    nameyear
    city
    北京张三2001
    上海李四2001
    广州王五2003
    北京小明2002
    df5.loc[['北京','上海'],['name','year']]
    
    • 1
    nameyear
    city
    北京张三2001
    北京小明2002
    上海李四2001
    df5.loc[df5['year']<=2002,['name','year']]
    
    • 1
    nameyear
    city
    北京张三2001
    上海李四2001
    北京小明2002
    df5
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    广州2003王五male
    北京2002小明male
    df5.iloc[:,2]
    
    • 1

    city
    北京 female
    上海 female
    广州 male
    北京 male
    Name: sex, dtype: object

    df5.iloc[[1,3]]
    
    • 1
    yearnamesex
    city
    上海2001李四female
    北京2002小明male
    df5.iloc[[1,3],:2]
    
    • 1
    yearname
    city
    上海2001李四
    北京2002小明
    df5.iloc[[1,3],[0,2]]
    
    • 1
    yearsex
    city
    上海2001female
    北京2002male
    df5
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    广州2003王五male
    北京2002小明male
    df5.query('year>2001')
    
    • 1
    yearnamesex
    city
    广州2003王五male
    北京2002小明male
    df5.query('year>2001 & year<2003')
    
    • 1
    yearnamesex
    city
    北京2002小明male
    df5[df5['year']==2001]
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    df5.query('year==2001')
    
    • 1
    yearnamesex
    city
    北京2001张三female
    上海2001李四female
    df
    data1 = {'city':'兰州','name':'李红','year':2005,'sex':'female'}
    # df.append(datal,ignore_index=True)
    
    • 1
    • 2
    • 3
    df
    
    • 1
    namesexyearcity
    0张三female2001北京
    1李四female2001上海
    2王五male2003广州
    3小明male2002北京
    # 增加列
    df['score']=[56,85,98,78]
    df
    
    • 1
    • 2
    • 3
    namesexyearcityscore
    0张三female2001北京56
    1李四female2001上海85
    2王五male2003广州98
    3小明male2002北京78
    # 指定索引位置的后面插入列
    df.insert(1,'No',['001','002','003','004'])
    df
    
    • 1
    • 2
    • 3
    nameNosexyearcityscore
    0张三001female2001北京56
    1李四002female2001上海85
    2王五003male2003广州98
    3小明004male2002北京78
    # 删除数据
    print(df5)
    print(df5.drop('广州'))
    print(df5)  # 并没有在原数据修改
    
    • 1
    • 2
    • 3
    • 4

    .
    year name sex
    city
    北京 2001 张三 female
    上海 2001 李四 female
    广州 2003 王五 male
    北京 2002 小明 male
    year name sex
    city
    北京 2001 张三 female
    上海 2001 李四 female
    北京 2002 小明 male
    year name sex
    city
    北京 2001 张三 female
    上海 2001 李四 female
    广州 2003 王五 male
    北京 2002 小明 male

    
    
    • 1
    # 删除列
    # df.drop('score',axis=1,inplace=True)
    # df
    
    • 1
    • 2
    • 3
    # 修改列(直接修改原数据)
    df['year']=2001
    df
    
    • 1
    • 2
    • 3
    nameNosexyearcityscore
    0张三001female2001北京56
    1李四002female2001上海85
    2王五003male2001广州98
    3小明004male2001北京78
    # 替换值
    df.replace('张三','李明',inplace=True)
    df
    
    • 1
    • 2
    • 3
    nameNosexyearcityscore
    0李明001female2001北京56
    1李四002female2001上海85
    2王五003male2001广州98
    3小明004male2001北京78
    # 替换多个值
    df.replace({'李明':'张山山','王五':'小五'},inplace=True)
    df
    
    • 1
    • 2
    • 3
    nameNosexyearcityscore
    0张山山001female2001北京56
    1李四002female2001上海85
    2小五003male2001广州98
    3小明004male2001北京78
    # 修改列名,要指定
    df.rename(columns={'No':'number'},inplace=True)
    df
    
    • 1
    • 2
    • 3
    namenumbersexyearcityscore
    0张山山001female2001北京56
    1李四002female2001上海85
    2小五003male2001广州98
    3小明004male2001北京78
  • 相关阅读:
    【Spring Boot 集成应用】RocketMQ的集成用法(下)
    Windows与Linux之间的文件互传
    STM32 OLED屏幕显示详解
    DStream转换介绍_大数据培训
    “她经济”崛起,茉莉智慧如何以科技赋能月子中心迭代升级?
    初识RxJS
    二维码智慧门牌管理系统升级解决方案:查询功能大提升,让地址查找变得轻松便捷!
    sql10(Leetcode1661每台机器的进程平均运行时间)
    TensorFlow基本概念:张量、计算图
    Redis数据库入门
  • 原文地址:https://blog.csdn.net/m0_74261473/article/details/133780985