pandas 库学习

pandas与numpy类似,均可用于数据分析,但与numpy不同的是,pandas更像是一个字典,一般情况下是两者搭配使用:
  • pandas基本操作
	import pandas as pd
	import numpy as np
	s=pd.Series([1,2,3,4])
	# 生成6个从2019-5-25开始的日期索引
	# 如果不创建索引,则生成默认索引0、1、2.....
	dates=pd.date_range('2019-5-25',periods=6)
	# index代表行的索引 columns代表列的索引
	df=pd.DataFrame(np.random.random((6,4)),index=dates,columns=['a','b','c','d'])
	print(df)

输出结果:
在这里插入图片描述
使用字典的方式创建:

	import pandas as pd
	import numpy as np
	a={'B':1,'C':pd.Categorical(['aaa','bbb','ccc'])}
	b=pd.DataFrame(a)
	print(b)

输出结果:
在这里插入图片描述
基本操作:

	import pandas as pd
	import numpy as np
	a={'B':1,'C':pd.Categorical(['aaa','bbb','ccc'])}
	b=pd.DataFrame(a)
	print("打印每一列的类型:",b.dtypes)
	print("行的索引:",b.index)
	print("列的索引:",b.columns)
	print("打印值:",b.values)
	print("获取参数(只会计算数值类型):",b.describe())
	print("将数据看作矩阵transpose:",b.T)
	print("根据索引排序(横向 倒叙):",b.sort_index(axis=1,ascending=False))
	print("对里边的值进行排序:",b.sort_values(by='B'))
  • 选择数据
	import pandas as pd
	import numpy as np
	dates=pd.date_range('2015-5-25',periods=6)
	d=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['a','b','c','d'])
	print("输出某一列:",d.a,d['a'])
	print("切片输出:",d[0:3],d['2015-05-25':'2015-05-27'])
	print("根据标签选择loc(以逗号做分割,前边为行,后边为列的选择):",d.loc[:,['a','b']])
	print("根据索引选择iloc(index local )",d.iloc[3])
	print("标签和索引混合筛选ix(mixed selection):",d.ix[:3,['a','b']])
	print("条件筛选,本例中筛选a中大于8的DataFrame:",d[d.a>8])
  • 修改DataFrame中的值
	import pandas as pd
	import numpy as np
	dates=pd.date_range('2015-05-25',periods=6)
	d=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['a','b','c','d'])
	# 根据索引进行修改,将[2,2]中的值改为111
	d.iloc[2,2]=111
	# 根据标签进行修改,将2015-05-25 a的值改为1111
	# 同理可以使用d.ix[]进行混合选择方式修改
	d.loc['2015-05-25','a']=1111
	# d中a列中大于3的数改为0
	d.a[d.a>10]=0
	# 添加一个空的列
	d['f']=np.nan

  • 处理丢失数据(nan)
	import pandas as pd
	import  numpy as np
	dates=pd.date_range('2015-5-25',periods=6)
	d=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['a','b','c','d'])
	d.iloc[2,2]=np.nan
	d.iloc[3,2]=np.nan
	# how ={'any','all'}有任何一个nan就丢掉/全部是nan丢掉
	c=d.dropna(axis=0,how='any')
	print("填充nan:",d.fillna(value=0))
	print("检查是否缺失(返回True/False的DataFrame,缺失则为True):",d.isnull())
	print("数据较大时,检查是否有=空数据:",np.any(d.isnull())==True)
  • 导入导出数据

官方文档:http://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

基本读、写操作:

	import pandas as pd
	import numpy as np
	dates=pd.date_range('2015-5-25',periods=6)
	d=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['a','b','c','d'])
	d.to_csv('student.csv')
	data=pd.read_csv('student.csv')
  • 多个DataFrame合并
  1. concat
	import pandas as pd
	import  numpy as np
	f1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
	f2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
	f3=pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
	# 连接DataFrame  忽视索引 重新创建0、1、2.。。的索引
	# inner模式只处理相同部分的合并,默认为outer模式
	# 如果未outer模式存在不相同部分时,不存在的位置为NAN
	# axis 合并方向
	# 如果axis=1 左右合并时 以f1的index做索引值,如果不设置,两者都会考虑,不存在的为nan
	res=pd.concat([f1,f2,f3],ignore_index=True,join='inner',axis=0,join_axes=[f1.index])
	s1=pd.Series([1,2,3,4],index=['a','b','c','d'])
	print("添加一个DataFrame:",f1.append(s1,ignore_index=True))
  1. merge
	import pandas as pd
	import numpy as np
	left=pd.DataFrame({'key1':['K4','K1','K2','K3'],
	                   'key2':['K0','K1','K2','K3'],
	                   'a':[1,2,3,4],
	                   'b':[5,6,7,8]})
	right=pd.DataFrame({'key1':['K0','K1','K2','K3'],
	                    'key2':['K0','K1','K2','K3'],
	                    'a':[8,9,10,11],
	                    'd':[0,1,3,4]
	})
	# 以key进行合并,只会合并共同存在的
	# 默认how为inner属性,如果有相同部分,进行合并how={'inner','outer','left','right'}
	# indicator显示合并方式 想改变indicator的显示值直接indicator=name
	res=pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
	# 改变合并方式  考虑为index
	res=pd.merge(left,right,left_index=True,right_index=right,how='inner')
	# suffixes 当有相同项进行合并时使用suffixes做区别
	res=pd.merge(left,right,on='key1',suffixes=['_boy','_girl'],how='inner')

  • plot画图
	import matplotlib.pyplot as plt
	import numpy as np
	import  pandas as pd
	data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD'))
	data=data.cumsum()
	data.plot()
	plt.show()

结果
在这里插入图片描述

	import matplotlib.pyplot as plt
	import numpy as np
	import  pandas as pd
	data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD'))
	data=data.cumsum()
	# plot methods:
	#  bar -条形图 hist box kde area scatter hexbin pie
	# 点图 横轴为A  纵轴为B
	ax=data.plot.scatter(x='A',y='B',color='red',label='Class 1')
	# 蓝色附着在 ax 上
	data.plot.scatter(x='C',y='D',color='blue',ax=ax,label='Class 2')
	plt.show()

结果
在这里插入图片描述

matplotlib其他见菜鸟教程:https://www.runoob.com/numpy/numpy-matplotlib.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值