数据文件读取
定义:指的是将磁盘、第三方数据读取到内存里
引申——数据的来源在哪里?
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 '''