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') 文件另存到当前路径