python 两个dataframe 相加 两个dataframe合并_pandas plot label


一、为什么学习pandas

  • numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
  • numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!

二、什么是pandas?

  • 首先先来认识pandas中的两个常用的类
  • Series
  • DataFrame

1.Series的创建

  • 由列表或numpy数组创建
  • 由字典创建
#series只能创建一维数组
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

#使用列表创建数组
s=Series(data=[1,2,3,4,5])
s


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_02


#numpy数组创建
s1=Series(data=np.random.randint(1,100,size=(2,)))
s1


python 两个dataframe 相加 两个dataframe合并_series去重_03


Series(data=[1,2,3],index=['a','b','c'])#index是用来指定显示索引,显示索引不会覆盖隐示索引


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_04


1.2.Series的索引和切片


s = Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])
s


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_05


#索引操作
s = Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])
print(s[0])#查找索引为0的元素
print(s['a'])#查找索引为0的元素
print(s.a)
print(s[[1,2]])#查找索引为0的元素


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_06


#切片
s[0:3]
s['a':'c']


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_07


1.3.Series的常用属性

  • shape
  • size
  • index
  • values
print(s.shape)
print(s.size)
print(s.index)
print(s.values)


python 两个dataframe 相加 两个dataframe合并_series去重_08


1.4.Series的常用方法

  • head(),tail()
  • unique()
  • isnull(),notnull()
  • add() sub() mul() div()
s.head(2)#显示前n个元素
s.tail(2)#后n个元素


python 两个dataframe 相加 两个dataframe合并_series去重_09


s = Series(data=[1,1,2,2,3,4,5])
s.unique()#去重


python 两个dataframe 相加 两个dataframe合并_series去重_10


s.nunique() #返回去重之后元素的个数


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_11


s.isnull() #isnull使用来检测元素是否为空


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_12


s.notnull()#用来检测元素是否为非空


python 两个dataframe 相加 两个dataframe合并_series去重_13


#add()为例
a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
a.add(b, fill_value=0)
print(a) 
print(b)
print(a.add(b,fill_value=0))


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_14


1.5.Series的算术运算

  • 法则:索引一致的元素进行算数运算否则补空
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','d','c'])
s = s1+s2
s


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_15


s.isnull()


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_16


s.notnull()


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_17


2.DataFrame

  • DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
  • 行索引:index
  • 列索引:columns
  • 值:values

2.1DataFrame的创建

  • ndarray创建
  • 字典创建
#ndarray创建
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
df=DataFrame(np.array([[1,2,33],[6,4,8]]))
df

#或者DataFrame(data=[[1,2,33],[6,4,8]])


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_18


#使用元祖创建
dic = {
    'name':['tom','jay','salay'],
    'salary':[10000,2000,15000]
}
DataFrame(dic)


python 两个dataframe 相加 两个dataframe合并_series去重_19


df =DataFrame(data=np.random.randint(0,100,size=(3,2)),index=['a','b','c'],columns=['A','B'])
df


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_20


2.2DataFrame的属性

  • values、columns、index、shape
print(df.values)
print(df.columns)
print(df.index)
print(df.shape)


python 两个dataframe 相加 两个dataframe合并_series去重_21


练习1:

根据以下考试成绩表,创建一个DataFrame,命名为df:


张三  李四  
语文 150  0
数学 150  0
英语 150  0
理综 300  0


代码


import numpy as np
import pandas as pd
from pandas import Series,DataFrame
df=DataFrame(data=[[150,0],[150,0],[150,0],[300,0]],columns=['张三','李四'],index=['语文','数学','英语','理综'])
df


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_22


2.3DataFrame索引操作(*重点)

  • 对行进行索引
  • 队列进行索引
  • 对元素进行索引
df = DataFrame(data=np.random.randint(0,100,size=(5,4)),columns=['a','b','c','d'],index=['A','B','C','D','E'])
df


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_23


#索引取列
df['a']#显示索引取列
df.iloc[:,0] #隐式索引取列
df.a


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_24


#取行
df.iloc[0] #隐式索引取行
df.loc['A'] #显示索引取行


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_25


  • iloc:
  • 通过隐式索引取行
  • loc:
  • 通过显示索引取行
#取元素
df.loc['B','b']
df.iloc[1,1]
df.iloc[[0,1],2]


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_26


2.4DataFrame的切片操作

  • 对行进行切片
  • 对列进行切片
#切行
df[0:2]


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_27


#切列
df.iloc[:,0:2]


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_28


总结:

  • df索引和切片操作
  • 索引:
  • df[col]:取列
  • df.loc[index]:取行
  • df.iloc[index,col]:取元素
  • 切片:
  • df[index1:index3]:切行
  • df.iloc[:,col1:col3]:切列

2.5DataFrame的运算

  • 同Series

练习2:

  1. 假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
  2. 假设张三期中考试数学被发现作弊,要记为0分,如何实现?
  3. 李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
  4. 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
#先建表,期中ddd和期末ddd2两张表
import pandas 
from pandas import Series,DataFrame
dic={
    '张三':[150,150,150,300],
    '李四':[0,0,0,0],
    '王五':[120,97,114,130]   
}  
df=DataFrame(data=dic,index=['语文','数学','英语','理综'])
ddd=df
ddd2=df
print(ddd)
print(ddd2)


python 两个dataframe 相加 两个dataframe合并_dataframe两个表合并_29


#1.假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。


python 两个dataframe 相加 两个dataframe合并_联合索引会创建几个索引_30


#2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
#先找到ddd中数学-张三成绩,然后再赋值为0
ddd.loc['数学','张三']=0
ddd.loc['数学','张三']


python 两个dataframe 相加 两个dataframe合并_series去重_31


#3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
#找到ddd表中李四的所有成绩(列),然后+100
ddd['李四']+=100
ddd['李四']


python 两个dataframe 相加 两个dataframe合并_python pd Series 添加行_32


#4.来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
ddd+=10
ddd


python 两个dataframe 相加 两个dataframe合并_series去重_33