python的重要工具pandas
博客中代码在jupyter notebook中实现
pandas是基于numpy构建的含有更高级数据结构和数据分析能力的工具包。numpy中数据结构是围绕ndarray展开的,pandas中数据结构是围绕Series和dataframe展开的。
1、Series结构
Series是定长的有序字典,它有两个基本属性:index&values
2、Series基本操作
2.1 创建一个Series
import pandas as pd
import numpy as np
s1=pd.Series([1,3,-7,5]) # 创建一个series,索引值默认为0,1,2,3......
print(s1)
结果:
0 1
1 3
2 -7
3 5
dtype: int64
2.2 查看Series的值
s1.values
结果:
array([ 1, 3, -7, 5], dtype=int64)
2.3 查看Series的索引
s1.index
结果:
RangeIndex(start=0, stop=4, step=1)
2.4 自定义索引创建Series
s2=pd.Series([0.2,1,3,5],index=['a','b','c','d']) # 自定义索引
print(s2)
结果:
a 0.2
b 1.0
c 3.0
d 5.0
dtype: float64
2.5 根据索引值进行值的查询
s2['a']
结果:
0.2
2.6 查看值是否在Series中
'b' in s2
结果:
True
2.7 将字典传入Series,实现字典的有序化
dic1={'apple':5,'banana':2} #创建一个字典
dic1
结果:
{'apple': 5, 'banana': 2}
s3=pd.Series(dic1) # 将字典传入series,将字典序列化
print(s3)
结果:
apple 5
banana 2
dtype: int64
3、dataframe结构
3.1 创建一个dataframe
data={'year':[2015,2016,2017,2018],
'income':[10000,20000,50000,30000],
'enpense':[5000,10000,60000,2000]}
df1=pd.DataFrame(data)
df1
结果:
3.2 创建一个dataframe,包含的数字范围和形状是给定的
df2=pd.DataFrame(np.arange(12).reshape((3,4)))
df2
结果:
3.3 创建一个dataframe,可以指定行列属性
df3 = pd.DataFrame(np.arange(12).reshape((3,4)),index=['a','c','b'],columns=['A','D','C','B']) # 指定行列属性
df3
结果:
3.4 获取行和列的属性
df1.columns #获取列的属性
结果:
Index(['year', 'income', 'enpense'], dtype='object')
df1.index #获取行的属性
结果:
RangeIndex(start=0, stop=4, step=1)
3.5 获取值的array格式
df1.values
结果:
array([[ 2015, 10000, 5000],
[ 2016, 20000, 10000],
[ 2017, 50000, 60000],
[ 2018, 30000, 2000]], dtype=int64)
3.6 获取dataframe的一些描述性属性
df1.describe()
结果:
3.7 dataframe的转置
df1.T
结果:
3.8 不同形式的排序
df3.sort_index(axis=1) #按照列的属性值排序
df3.sort_index(axis=0) # 按照行的索引值排序
3.9 删除某一列或者某一行
df3.drop(columns=['A'])
df3.drop(index=['a'])
3.10 替换行列名称
df3.rename(columns={'A': 'first', 'B': 'second'}, inplace = True) #替换列名
df3
4、dataframe的实际操作小例子
data = {'Chinese': [80,78,95,68,80,80],'English': [65, 85, 92, 88, 90,90],'Math': [30, 98, 96, 77, 90,90]}
df2 = pd.DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei','DianWei'], columns=['English', 'Math', 'Chinese'])
df2)
df2.drop_duplicates() # 去除重复行
首先创建一个数据表
df1 = pd.DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = pd.DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
df1
df2
df3 = pd.merge(df1, df2, on='name') #按name属性将两个dataframe进行连接
df3
df4 = pd.merge(df1, df2, how='inner') #inner内连接是基于键的交集进行连接
df4
df5 = pd.merge(df1, df2, how='left') #lift左连接,以第一个dataframe为主,第二个dataframe作为辅助
df5
df6 = pd.merge(df1, df2, how='right') #right右连接,以第二个dataframe为主,第一个dataframe作为辅助
df6
df7 = pd.merge(df1, df2, how='outer') #外连接是求两个dataframe的并集
df7
练习题之二:
首先创建一个dataframe,
import pandas as pd
data={'语文':[66,95,95,90,80,80],
'英语':[65,85,92,88,90,90],
'数学':[None,98,96,77,90,90]
}
df1=pd.DataFrame(data,index=['张飞','关羽','赵云','黄忠','典韦','典韦'])
df1
df1 = df1.drop_duplicates() #去除重复项
df1
def total_score(df): #定义一个计算总分的函数
df['总分'] = df['语文'] + df['英语'] + df['数学']
return df
df1['数学'].fillna(df1['数学'].mean(), inplace=True) #空值的填充方式,这里将空值用平均值代替
df = df1.apply(total_score, axis=1) #将函数应用到该数据表上
df