数据结构
Series
一维数组 与 numpy的array 以及 list相似 Series 可以保存不同类型的数据
DataFrame
理解成Seires的一种容器
series的初始化
s= pd.series([1,2,3,np.nan,4,5],index=[a,b,c,d,e,f])
返回左侧为下标 一般为数字,可以额外指定 但是数据类型必须统一
索引-数据的行标签
pd的索引下标就是行标签
s.index 返回索引信息
s.values 返回值
s[0] 返回第一个值
切片
s[2:5]
索引赋值
s.index.name=“索引” 让索引列headerview为: 索引
s.index=list(‘abcdef’) 相当于 s=pd.series([1,2,3,np.nan,4,5],index=[a,b,c,d,e,f])
使用字母切片的时候 是闭区间
Pandas 的 DataFrame
创建 DataFrame
方法一 通过二维数组的方式
DataFrame 是个二维数组
df=pd.DataFrame(np.random.randn(6,4)
生成一个6行4列的二维数组
0 1 2 3
0 -1.004211 0.228841 0.494869 -1.019319
1 -0.833322 -1.333550 0.113505 1.963115
2 -0.703133 0.732903 0.146812 -0.066615
3 1.185536 0.352014 0.960584 -1.706782
4 0.290114 -0.076001 0.241904 -0.593647
5 -1.047212 2.111794 -0.065611 0.988204
通过index 来指定行索引 通过columns 来指定列索引的名称
df =pd.DataFrame( np.random.randn(6,4),index=date,columns=list(‘abcd’))
a b c d
2019-01-01 0.258845 -1.756340 -0.338932 -0.543527
2019-01-02 1.621580 0.183436 0.258314 1.313766
2019-01-03 -0.973349 -1.334124 -0.638793 0.452062
2019-01-04 0.663128 0.452959 1.166851 -0.737856
2019-01-05 0.568413 -0.289317 -1.577237 -0.171491
2019-01-06 1.575756 -0.978803 0.728931 -0.460711
方法二 通过字典方式创建
df2=pd.DataFrame({‘A’:1.,‘B’:pd.Timestamp(‘20190101’),‘C’:pd.Series(1,index=(range(4)),dtype=float),‘D’:np.array([3]*4,dtype=int),‘E’:pd.Categorical([“test”,“train”,“test”,“train”]),‘F’:‘abc’})
类别是不限制的 但是每列的数据必须是一样的 每列之间可以不同
字典里面的key代表索引列 value 是可以能够转化为Series的对象
A B C D E F
0 1.0 2019-01-01 1.0 3 test abc
1 1.0 2019-01-01 1.0 3 train abc
2 1.0 2019-01-01 1.0 3 test abc
3 1.0 2019-01-01 1.0 3 train abc
查看数据
head 与 tail
df.head(10) 如果不填写则默认前五行
df.tail(3) 显示后3行
df.dtypes 显示每列的数据类型
查看下标
df.index 显示每行的索引
df.columns 显示每列的索引名称
df.values 显示数据
读取数据及数据操作
读入excle 或者csv
df=pd.read_excel(‘kkkkk’) 'kkkkk’是本目录下文件或者文件的绝对路径\
pd.read_excel 详细了解一下。比如多个SHEET如何选中其中一个,还有选择某个区域导入。。等等
行操作 iloc
df.iloc[0] 显示第一行的信息
df.iloc[0:5] 左闭右开的取件
df.loc[0:5] 闭区间
添加一行
先构造字典数据
dit=dit={'名字':"复仇者联盟",'投票人数':"123456","类型":"剧情/犯罪","产地":"美国","上映时间":"1994-09-10 00:00:00","时长":190,"年代":2018,"评分":8.0,"首映地点":"美国"}
s=pd.Series(dit)
s.name=38738
df=df.append(s)
删除一行
df=df.drop([series.name])
列操作
列名称
df.columns
查看某列的信息
df[‘名字’][:5] 查看 名字 列 前5行的数据
df[[‘名字’,‘类型’]] 查看多列的数据
增加一列
df[‘序号’]=range(1,len(df)+1)
删除一列
df.drop(“序号”,axis=1) 因为不是drop行 要写明白 列名“序号” , axis=0 是行 axis=1 为列
通过标签选择数据
df.loc[1,‘名字’] 返回 第二行 名字列的数据
df.loc[[行标签],[列标签]]
条件选择
df[“产地”] == “美国” 得到df中产地是美国的一个 bool series
再根据bool数据进行选择
df[df[‘产地’]==“美国”] 筛选出符合条件的数据
df[df[‘产地’]==“美国”][:5]选出前五行\
df[(con_1)&(con_2)] 两个条件 & and 的关系
df[(df.产地==“美国”) & (df.评分>()]
df[((con_1)|(com_2))&(con_3)]
缺失值与异常值的处理
缺失值处理方法
方法 说明
dropna
fillna
isnull
notnull\
方法 | 说明 |
---|---|
dropna | 根据标签中的缺失值进行过滤,删除缺失值 |
fillna | 对缺失值进行填充 |
isnull | 返回一个布尔值对象,判断哪些值是缺失值 |
notnull | isnull的否定式 |
判断缺失值
df.isnull()
df[‘columns_name’].isnull() 判断某列缺失值 返回 bool值
df[df[‘columns_name’].isnull()] 返回 缺失值的dataframe
填充缺失值
df[‘评分’].fillna(0,inplace=True) 用 数字 0 填充评分列缺失值,并且直接替换原数据、
df1=df.fillna(“未知数据”) 会将所有控制都填充为 “未知数据” 谨慎使用。
删除缺失值
df.dropna()
参数: how=“all” 删除全未控制的行或者列
inplace=True 覆盖之前的数据 df 会变成删除掉缺失值之后的数组
axis=0 选择行或者列\
处理异常值
一般异常值都很少,在不影响数据整体份的情况下,直接删除就好了
df=df[df.投票人数>0] 直接筛选出合理数值
数据保存
完成数据处理之后,我们将数据保存到Excel中
df.to_excel(“filename”) filename 未绝对或者相对路径 是数据保存的位置