Pandas

数据类型

Series

一维数组,类似于列表形式
1,初始化
s= pd.Series([1,3,5,'LOL',6,np.nan,9])
1      1
2      3
3      5
4    LOL
5      6
6    NaN
7      9
dtype: object
2,指定索引
第一种方法:
s= pd.Series([1,3,5,'LOL',6,np.nan,9],index=['a','b','c','d','e','f','g'])
a      1
b      3
c      5
d    LOL
e      6
f    NaN
g      9
dtype: object
第二种方法:(注意:list里面必须放字符串)
s.index=list('1234567')
1      1
2      3
3      5
4    LOL
5      6
6    NaN
7      9
dtype: object
3,索引
s.index		:查看索引
Index(['a', 'b', 'c', 'd', 'e', 'f', 'g'], dtype='object')

s.values		:查看值
array([1, 3, 5, 'LOL', 6, nan, 9], dtype=object)

s[3]		:查看索引为3的值
'LOL'

s[3:5]		:切片查看索引[3,5)的数据,不包括索引为5的值
d    LOL
e      6
dtype: object

s[::2]		: 隔行选取
a    1
c    5
e    6
g    9
dtype: object
4,索引赋值,给索引取个名字
s.index.name='索引'
索引
a      1
b      3
c      5
d    LOL
e      6
f    NaN
g      9
dtype: object
5,取值
s['a':'d']	:注意左右全部都是闭区间
a      1
b      3
c      5
d    LOL
dtype: object

DataFrame

二维结构
构造DataFrame结构(注意英文标点符号)
1,构造一组时间序列
data = pd.date_range('20190913',periods=6)
DatetimeIndex(['2019-09-13', '2019-09-14', '2019-09-15', '2019-09-16',
               '2019-09-17', '2019-09-18'],
              dtype='datetime64[ns]', freq='D')

2,构造一个DataFrame结构
df = pd.DataFrame(np.random.randn(6,4))		:6行4列
	0				1			2			3
0	0.025075	0.005014	0.305978	1.806246
1	-0.562686	-0.644801	-1.018562	0.929969
2	-0.396082	-0.274481	-0.317612	0.220694
3	-0.364620	2.096740	-1.418870	-0.269361
4	1.270343	0.221015	0.136645	-0.276027
5	-0.533681	-1.915966	-0.253614	0.409704

3,使用1生成的时间序列作为DataFrame的行索引
df = pd.DataFrame(np.random.randn(6,4),index=data)
				0			1			2			3
2019-09-13	0.322132	0.648984	0.496007	-1.457270
2019-09-14	0.105951	0.508827	0.715349	-0.150379
2019-09-15	0.726032	0.173610	1.561920	0.187463
2019-09-16	2.068398	-0.216113	0.524874	1.047223
2019-09-17	-0.580433	-0.621807	1.553698	-0.622265
2019-09-18	-0.016574	0.322204	-1.036387	0.959166

4,修改默认的列名称
df = pd.DataFrame(np.random.randn(6,4),index=data,columns=list('ABCD'))
				A			B			C			D
2019-09-13	-1.028270	-0.033174	0.900821	-0.401112
2019-09-14	0.820024	2.353149	0.104232	-0.313634
2019-09-15	0.799407	-1.364124	-1.175814	-0.239997
2019-09-16	0.249721	-0.216348	-0.578978	1.141702
2019-09-17	0.729927	0.364525	-0.559631	-0.957192
2019-09-18	-0.902769	1.328745	0.116499	1.196306
DataFrame查看数据
1,头尾数据
df.head(3)		:查看前3行数据,参数不指定时默认为5
df.tail(3)		:查看后3行数据,参数不指定时默认为5

2,查看每一列的数据类型
df.dtypes

3,下标、列标、数据
df.index		:查看索引
df.columns		:查看列名称
df.values		:查看值

pandas读取数据及数据操作

1,读取excel数据
df = pd.read_excel(r'文件名.xls')		:r字符时防止转义

2,行操作
df.iloc[0:5]		:读取索引前5行数据----左闭右开
df.loc[0:5]			:读取索引0-5行数据---全闭区间

3,添加一行
首先我们需要构造一个Series数据类型的数据,然后将数据添加到之前的excel中
构造数据字典
dit = {'院校名称':'家里蹲大学','院校地址':'家里','所属省份':'家里','所属城市':'中国','院校logo':'wwwww','招办网址':'www','招办电话':'17611666527','是否是985、211':'985 211'}
将字典数据类型转化为Series类型
s = pd.Series(dit)
指定这行数据的索引名称
s.name=2818
将这行数据添加进去
df = df.append(s)

4,删除一行
df1=df1.drop([2818])		:drop函数中[]里面是行索引

5,列操作
df.columns		:查看每一列的列名称
查看一列
df['院校名称']		:查看指定列的数据
df['院校名称'][:5]	:查看前5行数据

查看多列
df[['院校名称','所属省份']][0:5]		:注意里面是个列表

6,增加一列
df['序号']=range(1,len(df)+1)

7,删除一列
df=df.drop('序号', axis=1)		:必须指定这一列
注意:axis=0表示行,axis=1表示列

8,通过标签选择数据
选择一行
df1.loc[1,'院校地址']	:获取索引为1,列名称为“院校地址”的数据
选择多行
df1.loc[[1,2,3,4],['院校名称','所属省份','所属城市']]
	院校名称	    所属省份	所属城市
1	清华大学	      北京	       北京市
2	北京邮电大学	  北京	       北京市
3	中国人民大学	  北京	       北京市
4	北京理工大学	  北京	       北京市

9,条件选择
获取 所属城市是北京市的数据
df1[df1['所属城市']=='北京市']
或
df1[df1.所属城市=='北京市']

&(与)关系
获取 所属城市是北京市,并且是985 211的院校数据
df1[(df1['所属城市']=='北京市')&(df1['是否是985、211']=='985 211')]

|(或)条件
获取 所属城市是北京市或者是广州市,并且是985 211的院校数据
df1[((df1['所属城市']=='北京市')|(df1['所属城市']=='天津市'))&(df1['是否是985、211']=='985 211')]
或
df1[((df1.所属城市=='北京市')|(df1.所属城市=='天津市'))&(df1['是否是985、211']=='985 211')]

10,缺失值及异常值的处理
缺失值处理方法:
方法				说明
dropna			根据标签中的缺失值进行过滤,删除缺失值
fillna			对缺失值进行填充
isnull			返回一个布尔值对象,判断哪些值是缺失值
notnull			isnull的否定式

判断缺失值:
df.isnull()		:对所有数据的判断,返回值为布尔值
df['院校名称'].isnull()	:对院校名称这一列进行判断返回值为布尔值
df[df['院校名称'].isnull()]	:将院校名称是空的值返回出来

填充缺失值:
df['所属省份'].fillna('甘肃',inplace=True)	:必要时加inplace=True 对操作进行保存
df.fillna('填充')		:对所有的空值统一填充

删除缺失值:
df.dropna()参数
how='all'	:删除全为空的行或列
inplace=True  :覆盖之前的数据---保存
axis=0	:选择行或列-----一般默认为0(默认删除一行)

异常值的处理:
数据中不合理的值,又称为离群点
先进行条件的判断,找到离群点,然后进行核对或者直接进行删除。
df=df[df.投票人数>0]	直接保存投票人数大于0的数据
df=df[df['投票人数']%1==0]		直接保存投票人数非小数的数据

数据保存

df.to_excel('要保存的文件名称.xls')		文件另存到当前路径