文章目录[隐藏]
1.Pandas简述
- Pandas是Python的一个数据分析包,该工具为解决数据分析工作而创立。
- Pandas纳入大量库和规范数据模型,提供高效的操作数据集所需的工具。
- Pandas提供大量能使咱们疾速便捷地解决数据的函数和办法。
- Pandas是字典模式,基于NumPy创立,让NumPy为核心的利用变得更加简略。
2.Pandas装置
pip3 install pandas
3.Pandas引入
import pandas as pd #为了不便实用pandas采纳pd简写
4.Pandas数据结构
Pandas 的次要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以解决金融、统计、社会科学、工程等畛域里的大多数典型用例。
4.1 Series
Series 是一种相似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相干的数据标签(即索引)组成。
import numpy as np import pandas as pd s=pd.Series([1,2,3,np.nan,5,6]) #nan(NAN,Nan):not a number 示意不是一个数字,np.nan是一个float类型的数据 print(s)#索引在右边 值在左边
4.2 DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列能够是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它能够被看做由 Series 组成的字典(独特用一个索引)。
dates=pd.date_range('20180310',periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D'])#生成6行4列地位 print(df)#输入6行4列的表格
print(df['B'])
#创立特定数据的DataFrame df_1=pd.DataFrame({'A' : 1., 'B' : pd.Timestamp('20180310'), 'C' : pd.Series(1,index=list(range(4)),dtype='float32'), 'D' : np.array([3] * 4,dtype='int32'), 'E' : pd.Categorical(["test","train","test","train"]), 'F' : 'foo' }) print(df_1)
print(df_1.dtypes) #输入数据类型
print(df_1.index)#行的序号
print(df_1.columns)#列的序号名字
print(df_1.values)#把每个值进行打印进去
print(df_1.describe())#数字总结
print(df_1.T)#翻转数据,行列对调
print(df_1.sort_index(axis=1, ascending=False)) #axis等于1按列进行排序 如ABCDEFG 而后ascending顺叙进行显
print(df_1.sort_values(by='E'))#按值进行排序
5.Pandas抉择数据
dates=pd.date_range('20180310',periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D'])#生成6行4列地位 print(df)
5.1 抉择某行或某列
print(df['A'])#或者df.A 抉择某列
5.2 切片抉择
print(df[0:3], df['20180310':'20180314']) #两次进行抉择 第一次切片抉择 第二次依照筛选条件进行抉择
5.3 依据标签loc-行标签进行抉择数据
print(df.loc['20180312', ['A','B']])#依照行标签进行抉择 准确抉择
5.4 依据序列iloc-行号进行抉择数据
print(df.iloc[3, 1])#输入第三行第一列的数据
print(df.iloc[3:5,0:2])#进行切片抉择
print(df.iloc[[1,2,4],[0,2]])#进行不间断筛选
5.5 依据判断筛选
print(df[df.A > 0])#筛选出df.A大于0的元素 布尔条件筛选
6.Pandas设置数据
6.1 依据loc和iloc设置
dates = pd.date_range('20180310', periods=6) df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A', 'B', 'C', 'D']) print(df)
df.iloc[2,2] = 999#单点设置 df.loc['2018-03-13', 'D'] = 999 print(df)
6.2 依据条件设置
df[df.A>0]=999#将df.A大于0的值扭转 print(df)
6.3 依据行或列设置
df['F']=np.nan print(df)
6.4 增加数据
df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180313', periods=6))#减少一列 print(df)
7.Pandas解决失落数据
解决数据中NaN数据,咱们用这个测试数据 property-data.csv
7.1 输入csv文件数据
import pandas as pd df = pd.read_csv('property-data.csv') print (df)
7.2 应用dropna()函数去掉NaN的行或列
new_df = df.dropna() print(new_df)
7.3 应用fillna()函数替换NaN值
print(df.fillna(value=0))#将NaN值替换为0
7.4 应用isnull()函数判断数据是否失落
print(pd.isnull(df))#矩阵用布尔来进行示意 是nan为ture 不是nan为false
print(np.any(df.isnull()))#判断数据中是否会存在NaN值
8.Pandas导入导出
pandas能够读取与存取像csv、excel、json、html、pickle等格局的材料,具体阐明请看官网材料
data=pd.read_csv('test1.csv')#读取csv文件 data.to_pickle('test2.pickle')#将材料存取成pickle文件 #其余文件导入导出形式雷同
9.Pandas合并数据
9.1 axis合并方向
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)#0示意竖项合并 1示意横项合并 ingnore_index重置序列index index变为0 1 2 3 4 5 6 7 8 print(res)
9.2 join合并形式
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3]) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d', 'e'], index=[2,3,4]) print(df1)
print(df2)
res=pd.concat([df1,df2],axis=1,join='outer')#行往外进行合并 print(res)
res=pd.concat([df1,df2],axis=1,join='inner')#行雷同的进行合并 print(res)
指定合并时应用的连贯形式,连贯形式有四种,默认为left。
代码 | 连贯形式 | |
---|---|---|
inner | 内连 | 取行索引的交加 |
outer | 外连 | 取行索引的并集 |
left | 左连 | 应用右边df的行索引 |
right | 右连 | 应用左边df的行索引 |
9.3 append增加数据
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) s1 = pd.Series([1,2,3,4], index=['a','b','c','d']) res=df1.append(df2,ignore_index=True)#将df2合并到df1的上面 并重置index print(res)
res=df1.append(s1,ignore_index=True)#将s1合并到df1上面 并重置index print(res)
10.Pandas合并merge
10.1 根据一组key合并
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) print(left)
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) print(right)
res=pd.merge(left,right,on='key') print(res)
10.2 根据两组key合并
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) print(left)
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) print(right)
res=pd.merge(left,right,on=['key1','key2'],how='inner')#内联结并 print(res)
res=pd.merge(left,right,on=['key1','key2'],how='outer')#外联结并 print(res)
res=pd.merge(left,right,on=['key1','key2'],how='left')#左联合并 print(res)
res=pd.merge(left,right,on=['key1','key2'],how='right')#右联结并 print(res)
10.3 Indicator合并
df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']}) print(df1)
df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]}) print(df2)
res=pd.merge(df1,df2,on='col1',how='outer',indicator=True)#根据col1进行合并 并启用indicator=True输入每项合并形式 print(res)
res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')#自定义indicator column名称 print(res)
10.4 根据index合并
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']}, index=['K0', 'K1', 'K2']) print(left)
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'], 'D': ['D0', 'D2', 'D3']}, index=['K0', 'K2', 'K3'])
res=pd.merge(left,right,left_index=True,right_index=True,how='outer')#依据index索引进行合并 并抉择外联结并 print(res)
res=pd.merge(left,right,left_index=True,right_index=True,how='inner') print(res)