博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---35、pandas(3)

Posted on 2020-03-06 20:18  兰智杰  阅读(196)  评论(0编辑  收藏  举报

数据文件读取

  定义:指的是将磁盘、第三方数据读取到内存里

  引申——数据的来源在哪里?

    1、来源第三方数据(接口数据),如:京东、淘宝都有第三方接口访问提供的数据

    2、来源于系统本身的访问数据,如:B/S架构的数据、保存到数据库的data

    3、基于浏览器的缓存数据,这种数据也很具有参考价值,通过该数据可以分析出客户的不同群体,如:QQ、微信的广告推送,通过缓存数据找到意向客户群体,大公司经常用

  通过pandas提供的read_xxx相关的函数可以读取文件中的数据,并形成DataFrame,常用的数据读取方法为:read_csv,主要可以读取文本类型的数据

pandas读取数据方式

  pandas读取数据方式为:read_xxx,常用的数据读取方法为:read_csv、read_excel等,在python数据解析、人工智能数据集、数据挖掘等操作里,数据一般都采用csv后缀

  引申——为什么使用csv?

    1、csv格式数据传输数据极快,csv也可以读取其他类型数据格式,兼容性很好

    2、csv格式数据易维护,数据的index清晰,适合做大数据分析

    3、csv数据在实际企业开发里用于保存大量的数据库备份数据、数据库的还原数据

    4、在硬件角度讲,u盘、移动硬盘的恢复还原都需要csv数据

import pandas as pd
df01=pd.read_csv('D:\学习文件\python\pandas\data1.csv')
print(df01)
'''
输出为      位置      名字
        0  中单     faker
        1   AD      bang
        2  辅助      wolf
'''
df02=pd.read_excel('D:\学习文件\python\pandas\data1.xlsx')
print(df02)
'''
输出为      位置     名字
        0  打野    bengi
        1  中单    faker
        2  上单    marin
'''
df03=pd.read_csv('D:\学习文件\python\pandas\data1.txt')
print(df03)
'''
输出为         位置     名字
        0     教练     okkma
        1     上单     huni
        2     打野     peanut
'''

pandas里的属性

  sep指的是将数据利用英文状态的隔开,以便于数据读取

  header给数据指定索引

    

import pandas as pd
df04=pd.read_csv('D:\学习文件\python\pandas\data2.txt',sep=';',header=None)
print(df04)
'''
输出为        0        1
        0  位置      名字
        1  教练     okkma
        2  上单      huni
        3  打野    peanut
'''

数据过滤获取

  定义: 指的是将之前的数据提供DataFrame过滤完之后再形成一个新的DataFrame——操作新的data

  在pandas数据过滤里面通过切片切的永远是数据标签属性(横排),而不是index(竖排),如果切的属性不存在,程序也不会报错,index始终存在,等价于一个id主键

import pandas as pd
df02=pd.read_excel('D:\学习文件\python\pandas\data1.xlsx')
print(df02[df02.columns[1:]])                   #切片切的是数据的属性
'''
输出为       名字
        0  bengi
        1  faker
        2  marin
'''
df04=({
        'name':['tony','mark','marry','bob'],
        'age':[18,19,20,21],
        'sex':['','','',''],
        'classid':3
        })
# df04.index=['one','two','three','four']  #dict' object has no attribute 'index'
# 将字典转换为DataFrame模式才有索引值!!!
df04=pd.DataFrame(df04)
df04.index=['one','two','three','four']
print(df04)
'''
输出为           name   age  sex  classid
        one     tony   18   男        3
        two     mark   19   男        3
        three  marry   20   女        3
        four     bob   21   男        3
'''
#切片切的是数据的属性
print(df04.columns[2:])     #输出为 Index(['sex', 'classid'], dtype='object')
print(df04[df04.columns[2:]])
'''
输出为          sex  classid
        one     男        3
        two     男        3
        three   女        3
        four    男        3
'''

pandas:缺省值NaN处理方法

  对于DataFrame/Series中的NaN一般采取的方式为删除对应的列/行或者填充一个默认值

  

  dropna操作:

    pd01.dropna()——删除有nan数据的行

    pd01.dropna(axis=1)——删除有nan的列

    pd01.dropna(axis=0)——删除有nan的行

    pd01.dropna(how=‘all’)——删除全部为nan的行,没有的话就全部返回

import pandas as pd
import numpy as np
# 定义一个1-9的随机数  4行4列
pd01=pd.DataFrame(np.random.randint(1,9,size=(4,4)))
print(pd01)
'''
输出为      0  1  2  3
        0  4  5  3  4
        1  1  6  3  6
        2  8  4  5  2
        3  1  2  4  1
'''
pd01.loc[1:2,1]=np.NaN
print(pd01)
'''
输出为      0   1   2  3
        0  4  5.0  3  4
        1  1  NaN  3  6
        2  8  NaN  5  2
        3  1  2.0  4  1
'''
print(pd01.dropna())                    #dorpna()删除有nan数据的行
'''
输出为      0   1   2  3
        0  4  5.0  3  4
        3  1  2.0  4  1
'''
print(pd01.dropna(axis=1))              #删除有nan的列
'''
输出为      0  2  3
        0  4  3  4
        1  1  3  6
        2  8  5  2
        3  1  4  1
'''
pd01.loc[0:2:2]=np.NaN                  #步长为2
print(pd01)
'''
输出为      0    1    2    3
        0  NaN  NaN  NaN  NaN
        1  1.0  NaN  3.0  6.0          第一行的NaN是上边已经改变的
        2  NaN  NaN  NaN  NaN
        3  1.0  2.0  4.0  1.0
'''
print(pd01.dropna(how='all'))           #删除全部为nan的行,没有的话就全部返回
'''
输出为      0    1    2    3
        1  1.0  NaN  3.0  6.0
        3  1.0  2.0  4.0  1.0
'''

  fillna操作:

    pd02.fillna(0)——将有nan的值变为指定值

    pd02.fillna({1:100,3:50})——指定有nan的列值为({列:值,列:值})

# fillna
import pandas as pd
import numpy as np
pd02=pd.DataFrame(np.random.randint(1,9,size=(4,4)))
pd02.loc[1:2,1]=np.NaN
pd02.loc[0:2,3]=np.NaN
print(pd02)
'''
输出为      0    1  2    3
        0  3  2.0  8  NaN
        1  5  NaN  1  NaN
        2  1  NaN  8  NaN
        3  2  5.0  7  6.0
'''
print(pd02.fillna(0))               #将有nan的值变为指定值
'''
输出为      0    1  2    3
        0  3  2.0  8  0.0
        1  5  0.0  1  0.0
        2  1  0.0  8  0.0
        3  2  5.0  7  6.0
'''
print(pd02.fillna({1:100,3:50}))    #指定有nan的列值为({列:值,列:值})
'''
输出为      0      1  2     3
        0  3    2.0  8  50.0
        1  5  100.0  1  50.0
        2  1  100.0  8  50.0
        3  2    5.0  7   6.0
'''