本篇是【机器学习与数据挖掘】头条号原创首发Python数据分析系列文章的第三篇
- Python数据分析系列文章之Python基础篇
- Python数据分析系列文章之Numpy
- Python数据分析系列文章之Pandas(上)
- Python数据分析系列文章之Pandas(下)
- Python数据分析系列文章之Scipy
- Python数据分析系列文章之Matplotlib
- Python数据分析系列文章之Seaborn
- Python数据分析系列文章之Polty
- Python数据分析系列文章之datetime
本章介绍python数据分析中比较主要的一个库pandas的使用,pandas篇分上下两部分,本节主要介绍pandas使用中一些比较重要的操作。
本节目录:
- 基本数据结构
- 基本功能
- 数据读存与文件格式
- 总结
基本数据结构
想要熟练的使用pandas,就需要了解pandas中两种重要的数据结构:Series和DataFrame。
import pandas as pd
Series
1、创建
pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
Series一种类似于一维数组的数据对象,由一组数据和一组与之对应的索引组成。series创建方式有四种:
- 使用Python列表创建
- 使用numpy数组创建
- 使用Python字典创建
- 使用单个标量值创建
#左边为索引,右边为值,没有设置索引,则自动创建0-n的整数序列s1 = pd.Series(np.array([1,2,3,4,5,np.nan]))s2 = pd.Series([1,2,3,4,5])s3 = pd.Series({'a':1,'b':2,'c':3,'d':4})s4 = pd.Series(3)#可以自带索引值s5 = pd.Series([1,2,3,4,5],index=list('abcde'))
2、性质
下面主要介绍Series使用中一些常见的方法
#属性s1.index#RangeIndex(start=0, stop=5, step=1)#值s1.values#array([1, 2, 3, 4, 5]) #一维数组s1.value_counts(dropna=True) #值统计,平时用的比较多s1.notnull()s1.isnull() #返回元素是否缺失s1.fillna(0) #缺失值填充s1.drop_duplicates() #去重s1.apply(lambda x:x+1) #用的比较多的性质s2.astype('int') #如果里面有一些不能转为该类型的元素值(如NA,'a')就会出错。s2.iat[0] #取第一个元素,不是按照indexs2.dtypes #dtype('int64'),类型s2.nunique() #5,Series中的元素个数,没有重复的#修改indexindex = ['a1','b1','c1','d1','e1']s5 = pd.Series(dict(s3),index=index)s5#a1 1.0b1 2.0c1 3.0d1 4.0e1 NaNdtype: float64
3、取值与运算
###取值####s1[2] #通过index取数据s3.iat[2] #通过index的顺序取 s1[s1>=3] #取出Series中大于等于3的子集,返回的还是Seriess1[s1.isnull()==True] #去元素为空缺值的子Series###运算###s2**2#0 21 42 63 84 10dtype: int64s2+s2 #输出同上np.exp(s2)#0 2.7182821 7.3890562 20.0855373 54.5981504 148.413159dtype: float64
DataFreme
1、创建
DataFrame是一种表格型的数据结构,它含有一组有序的列,每一列元素值类型可以是数值型、类别型、布尔类型,有行和列索引,可以看成是有Series组成的字典,DataFrame中的数据可以是一个或者多个二维块组成(不是列表、字典或其他一维数据结构)。
data = {'city': ['BeiJing','WuHan','HangZhou','ShangHai','ChnengDu','ChongQing'], 'gender':[0,1,1,0,1,0], 'age':[24,65,34,80,12,28]})d1 = pd.DataFrame(data)
自动添加了索引,可以根据指定列的顺序进行排列。
#类似于Series,如果传入的列没有值,则为空(NaN)d2 = pd.DataFrame(data,columns=['gender','age','city'])d3 = pd.DataFrame(data,columns=['gender','age','city','name'],index=[list('abcdef')]
2、性质
#取一列d1['age'] #为Series对象,返回索引为原DataFrame的索引,等价于d1.age#0 241 652 343 804 125 28Name: age, dtype: int64#取一行d1.ix[3]#age 80city ShangHaigender 0Name: 3, dtype: objectd1.loc[3] #取行做使用.loc或者.iloc。#age 80city ShangHaigender 0Name: 3, dtype: object#赋值修改d3.name = '李四'#新加入一类d1['is_men'] = d1.geder==1s1.values #array格式数据