Python学习DAY4|Pandas库的使用方法

本笔记摘录清华大学工业工程系朱成礼老师的python教案与授课内容,并在此基础上进行实操性的拓展,希望能对大家有所帮助。

零、简介 

DataFrame是一个二维数据结构, 既有行索引(index)也有列索 引(columns)。同一列的元素必须具有相同的数据类型,列与列之间可以是不同的数据类型(数值、字符串、布尔型值)。

存字符串对象时,存的是字符串的地址,所以type=object

Series是一种类似于一维数组的对象,它只允许存放相同的数据类型的数据。Series是DataFrame的一列,在series形成dataframe时,不同的行共享一个列索引,不同的列共享一个行索引。

 一、Series对象(一维数据)

1、创建Series对象

Series似于一维数组的对象,它只允许存放相同的数据类型的数据。它内部构件了两个相关联的数 组,一个是数据数组values,一个是索引数组index。 

import pandas
pandas.Series(data=None, index=None, dtype=None, name=None)
# data: 一组数据,可为ndarray,list或dict或一个标量
# index: 数据索引标签,从零开始
# dtype: 一般不指定,数据类型于系统自动判断
# name: 为series取名

2、Series对象的属性(前缀是series对象的名字)

 输入的value是List,而输出却是numpy中的array,要注意!

3、Series数据的查询和修改

切片生成视图共享数据,修改后series改变。而索引是创建副本,原来的series不会发生改变

4、Series对象的基本运算

与numpy的基本运算相同,两个series间的基本运算靠索引,若索引值对不上,结果就是NaN=not a number

示例1:

# 分别以x和y为数据,以index_x,index_y为索引创建Series对象s1,s2
import pandas as pd
import numpy as np

# 分别导入x和y的数据
x = [2, 4, 6, 2, 4, 8]
index_x = ['a', 'b', 'c', 'd', 'e', 'f']

y = [1, 3, 5, 1, 3, 7]
index_y = ['j', 'b', 'c', 'd', 'e', 'f']

# 创建Series
s1 = pd.Series(data=x, index=index_x)
s2 = pd.Series(data=y, index=index_y)
print(f's1=\n{s1}')
print(f's2=\n{s2}')

# 计算并输出z = np.sin(s1)+np.cos(s2)
z = np.sin(s1) + np.cos(s2)
print(f'第二问计算结果为:\n{z}')

# 观察索引不匹配的元素结果
x = z['a']
print(f'索引不匹配的元素结果为:{x}')

二、DataFrame对象与基本运算(二维数据)

1、DataFrame对象的创建与属性查看

pandas.DataFrame(data,index,columns,dtype)
# data: list, array, dict{key:list}, series
# index: 行索引,行标签arange(n)
# column: 列索引,列标签 arange(n)

传入,由等长列表或数组组成的字典 

 前置标签是DataFrame

2、DataFrame数据的查询和编辑

2.1选取一个元素 

df['列名']['行索引']

df.loc['行索引',‘列名’]

df.iloc[1,1]  # iloc传的是序号,只要有了列名,列的序号索引就没有啦,就不能用iloc了

2.2选取列

df.Java  # 选取一列

df[['sdf','java']]  # 选取多列 

2.3选取行

 

 Q:这些选取行的函数是否可以用来改变行并返回原来的DataFrame????

只有loc和iloc是切片,其他的有返回值的都是索引和生成副本。

2.4 选取行和列(loc是切片)

2.5 筛选元素 

表示在所有元素中选择有java或者有95的值

2.6删除和修改元素 

 inplace=True表示原地删除,改变原来的数了

2.7示例2

# 创建一个DataFrame对象,以国家名作为索引,以GDP Pop Area作为列索引
import pandas as pd

s_data = {'GDP': [17.72, 23.03, 1.78, 2.94, 3.19],
          'Pop': [14.12, 3.33, 1.46, 0.65, 0.67],
          'Area': [960, 983, 1710, 55, 36]}
a = pd.DataFrame(s_data)
a.index = ['China', 'USA', 'Russia', 'France', 'UK']
a.columns = ['GDP', 'Pop', 'Area']

# 输出China行,Pop列的元素值,选取并输出GDP,Pop所在的列
b = a['Pop']['China']
print(f'China行,Pop列的元素值:\n{b}')
c = a[['GDP', 'Pop']]
print(f'GDP,Pop所在的列:\n{c}')

# 查询并输出GDP值大于10(万亿美元)行,输出第二至第四行,第一至第二列的元素切片
d = a[a['GDP'] > 10]
print(f'GDP值大于10(万亿美元)行:\n{d}')
# e = a.loc[['USA', 'Russia', 'France'], ['GDP', 'Pop']]
e = a.iloc[1:4, 0:2]
print(f'输出第二至第四行,第一至第二列的元素切片:\n{e}')

# 增加列名为GNP的一列,并输出修改后的DataFrame对象
a['GNP'] = [16.79, 23.37, 1.69, 2.96, 3.06]
print(f'修改后的DataFrame对象:\n{a}')

# 查询并输入GDP>10,Area>900的行
f = a.query("GDP>10 and Area>500")
print(f'GDP>10,Area>900的行:\n{f}')

# 将UK的Area修改为35.76,删除GDP所在的列
g = a.loc['UK', 'Area'] = 35.76
h = a.drop('GDP', axis=1, inplace=True)
print(f'将UK的Area修改为35.76,删除GDP所在的列:\n{a}')

3、DataFrame算术运算与排序

3.1 算术运算

df表示我们创造出来的DataFrame的名字

 apply是作用于行或者列,applymap是作用于元素上。如果想作用于特定的地方,把他切出来就OK啦!

3.2 排序

df.sort_values(by=['Java', 'Python']  # 表示先按java这一列进行行排序,对于java排序结果相同的,用python进行排序

axis=0和默认情况下,是对列进行排序,axis=1是对行进行排序

4、DataFrame数学统计

4.1 常用统计函数

4.2 describe函数 

 50% 类别绩点前百分之五十保研

axis=0对列求和,axis=1对行求和

 4.3用sum()对行和列进行求和

 df.sum(axis=1)  # 对行进行求和

4.4 计算协方差和相关系数

 4.5 数组的分类与聚合

df.groupby(by=None, axis=0) by:用于指定分组的依据 axis:axis=0按行分组,axis=1对列分组

 4.6 示例三

# 读取lris.csv文件,第一列为行索引,第一行为列索引
import pandas as pd

a = pd.read_csv('Iris.csv', index_col=[0], header=[0])
b = a.head(10)
print(f'前十行数据为:\n{b}')  # 输出前十行数据

# 按PetalLengthCm列值大小排序,输出排序后的结果
c = a.sort_values(by='PetalLengthCm')
print(f'按PetalLengthCm排序结果为:\n{c}')

# 输出SepalLengthCm  SepalWidthCm
# PetalLengthCm  PetalWidthCm列的最大值、最小值、均值和中位数,计算各列之间的相关系数
a1 = a[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']]
d = a1.max(axis=0)
print(f'各列的最大值为;\n{d}')
e = a1.min(axis=0)
print(f'各列的最小值为:\n{e}')
f = a1.mean(axis=0)
print(f'各列的均值为:\n{f}')
g = a1.median(axis=0)
print(f'各列中位数为:\n{g}')
h = a1.corr(method='pearson')
print(f'各列之间的相关系数 :\n{h}')

# 使用groupby()按species分组,对各组进行计数,求各组的最大值最小值和均值
m = a.groupby(by='Species', axis=0)
m1 = m.count()
print(f'对各组进行计数后的结果为:\n{m1}')
m2 = m.max()
print(f'最大值为:\n{m2}')
m3 = m.min()
print(f'最小值为:\n{m3}')
m4 = m.mean()
print(f'均值:\n{m4}')

 四、Pandas数据可视化

1. DataFrame绘图函数

DataFrame.plot(x=None, y=None, kind=’line’, ax=None, subplots=False, sharex=None,
 sharey=None, layout=None, figsize=None, use_index=True, title=None, 
 grid=None, legend=True, style=None, logx=False, logy= False, 
 loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, 
 rot=None, fontsize=None, alpha)
# x:x轴的数据,默认行索引 use_index=True
# y: y轴数据,默认所有的列
# kind: 类型,line是线形图
# subplots=True 每一列绘制一个子图
# layout子图布局,(3,4)
# figsize指定画板大小(10,13)
# grid底层网格,legend图例
# rot=45 x_stick倾斜
# fontsize字的大小
# alpha 线的透明度,(0,1) 
# stacked=True 摞起来

2. 常用2维图绘制

2.1 绘制线形图

# 绘制折线图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_csv('GDP_2001_2021.csv', index_col=[0], header=[0])
years = [2001, 2005, 2009, 2013, 2017, 2021]
GDP = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
df.plot(kind='line', xticks=years, yticks=GDP, grid=True, xlabel='年份',
        ylabel='GDP(万亿)', title='主要国家GDP(2001-2021)', style='1--')
plt.savefig('GDP_2001_2021.png')
plt.show()

2.2 绘制条形图

# 绘制条形图
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

countries = ['中国', '美国', '俄罗斯', '法国', '英国']
items = ['GDP(万亿美元)', '人口(亿)']

df = pd.read_csv('GDP_POP_2021.csv', index_col=[0], usecols=['Country', 'GDP', 'Pop'])
df.index = countries
df.columns = items

df.plot(kind='bar', title='2021年GDP/人口', style='2-', grid=True, rot=30, stacked=False)

plt.savefig('Gdp_2001_2.png')  # 为了便于区分呢
plt.show()

2.3 绘制直方图

# 绘制直方图
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

columns = ['花萼长', '花萼宽', '花瓣长', '花瓣宽']

df = pd.read_csv('iris_hist.csv', header=None)
df.columns = columns
print(df)

df.hist(bins=20)
plt.savefig('iris_hist.png')
plt.show()

2.4绘制箱线图

# 绘制箱线图
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

columns = ['花萼长', '花萼宽', '花瓣长', '花瓣宽']

df = pd.read_csv('iris_hist.csv', header=None)
df.columns = columns

df.plot(kind='box')

plt.savefig('iris_box.png')
plt.show()

2.5 绘制散点图

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_csv('iris_hist.csv', header=None)
df.columns = ['花萼长', '花萼宽', '花瓣长', '花瓣宽']

df.plot(x='花萼长', y='花萼宽', kind='scatter', style='+')
plt.savefig('iris_scatter1.png')
plt.show()

df.plot(x='花瓣长', y='花瓣宽', kind='scatter', style='o')
plt.savefig('iris_scattter2.png')
plt.show()

2.6 绘制饼图 

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
countries = ['中国', '美国', '俄罗斯', '法国', '英国', '其他']

df = pd.read_csv('GDP_2021.csv', index_col=[0], header=[0])
df.index = countries
print(df)

df['GDP'].plot(kind='pie', subplots=True, autopct='%2.2f%%',
               legend=False, ylabel='', title='五国GDP占比')
plt.savefig('GDP_2021_pie.png')
plt.show()

五、Pandas读写数据

1. 读写csv和文本文件

1.1 读入csv文件(read_csv)

pd.read_csv(filepath, sep=',', header='infer', names=None, 
 index_col=None, usecols=None)

# filepath文件路径
# sep 指定分隔符
# header =[0,2],这些行将被忽略
# names 重设表头/列名
# index_col 可以是列索引或列名
# usecol 选择某几列

1.2 写入csv文件(to_csv)

df.to_csv(filepath, sep=',', na_rep='', columns=None, 
 header=True, index=True)
# na_rep 把空字段指定为na_rep指定的值
# columns 指定要写入文件包含哪些列
# header 是否保存列名
# index 是否保存行索引

2. 读写Excel数据文件

需要安装openpyxl扩展库! 

2.1 读取excel数据

pandas.read_excel( io, sheet_name=0, header=0, 
 index_col=None, usecols=None, 
 skiprows=None, skip_footer=0)
# skiprows 指定要排除的行
# skip_footer 读取数据时忽略最后skip_footer指定的行,最后几行不要

2.2 写入excel数据

df.to_excel(excel_writer, na_rep=’’, 
 sheet_name=‘Sheet1’, columns=None, 
 header=True, index=True)

# excel_writer 写入的excel文件
# sheet_name 工作表名称
# na_rep 缺失值填充
# columns 选择输出的列
# header 指定列名,布尔值或者列表
# index 是否显示行索引

3.示例

# 加载iris.csv, 并将数据保存到excel文件,行和列与原文件保持一致
import pandas as pd

df = pd.read_csv('Iris.csv', index_col=[0], header=[0])
df.to_excel(excel_writer='Iris.xlsx', sheet_name='Sheet1')
# 加载上述文件,以第一列为行索引,一第一行为列索引,创建DataFrame对象,并输出对象中的数据
df_excel = pd.read_excel('Iris.xlsx', sheet_name='Sheet1', index_col=[0], header=[0])
print(df_excel)

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值