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)

在这里插入图片描述


土豆
17 声望5 粉丝