DataFrame和Series是Pandas最基本的两种数据结构
可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
创建 Series 的最简单方法是传入一个Python列表
import pandas as pd
s = pd.Series([ ' banana ' ,42]
print(s)
输出结果
0 banana
1 42
dtype: object
创建Series时,可以通过index参数 来指定行索引
s = pd.Series(['Bill Gates','男'],index=['姓名','性别'])
姓名 Bill Gates
性别 男
Series代表一列数据, 需要注意 Pandas里面没有一种数据结构对应行的概念
创建DataFrame
name_list = pd.DataFrame({'姓名':['Tome','Bob'],'职业':['AI工程师','AI架构师'],'年龄':[28,36]})
# 生成三列数据,列索引分别为姓名,职业和年龄
pd.DataFrame() 默认第一个参数放的就是数据 - data 数据 - columns 列名
- index 行索引名
pd.DataFrame(data={'职业':['AI工程师','AI架构师'],'年龄':[28,36]},columns=['职业','年龄'],index=['Tome','Bob'])
# 原始行索引为0,1,现在行索引为Tome,Bob
Series DataFrame 在这里调用的时候, 都是大写的 (Pandas 的API 有些是大写字母开头的)
1.加载CSV文件
data = pd.read_csv('data/nobel_prizes.csv',index_col='id')
2.使用 DataFrame的loc 属性获取数据集里的一行,就会得到一个Series对象
first_row = data.loc[941]
first_row
3.可以通过 index 和 values属性获取行索引和值
first_row.values # 获取Series中所有的值, 返回的是np.ndarray对象
first_row.index # 返回Series的行索引
Series的一些属性
针对数值型的Series,可以进行常见计算
share = data.share
share.mean() # 计算平均值
share.max()
share.std() # 计算标准差
share.value_counts() # 统计每个取值在数据集中出现了多少次
share.count() # 返回有多少非空值
share.describe() # 一次性计算出 每一列 的关键统计量 平均值, 标准差, 极值, 分位数
movie.head(10) # 默认取前5条数据
# 查看df类型
type(df)
# 查看df的shape属性,可以获取DataFrame的行数,列数
df.shape
# 查看df的columns属性,获取DataFrame中的列名
df.columns
# 查看df的dtypes属性,获取每一列的数据类型
df.dtypes
df.info()
Pandas与Python常用数据类型对照
df根据列名加载部分列数据:加载一列数据,通过df['列名']方式获取,加载多列数据,通过df[['列名1','列名2',...]]。
df按行加载部分数据:先打印前5行数据 观察第一列 print(df.head()) 最左边一列是行号,也就是DataFrame的行索引 Pandas默认使用行号作为行索引。
loc方法传入行索引,来获取DataFrame的部分数据(一行,或多行)
df.loc[0]
df.loc[99]
df.loc[last_row_index]
iloc : 通过行号获取行数据
iloc传入的是索引的序号,loc是索引的标签
使用iloc时可以传入-1来获取最后一行数据,使用loc的时候不行
loc和iloc属性既可以用于获取列数据,也可以用于获取行数据
df.loc[[行],[列]]
df.iloc[[行],[列]]
df.loc[:,['country','year','pop']]
# 获取全部的行,但每一行的列内容接受三个
df.iloc[:,[0,2,4,-1]]
df.loc[:,[0,2,4,-1]]
df.iloc[:,0:6:2] # 所有行, 第0 , 第2 第4列
可以通过行和列获取某几个格的元素
先将数据分组 对每组的数据再去进行统计计算如,求平均,求每组数据条目数(频数)等 再将每一组计算的结果合并起来 可以使用DataFrame的groupby方法完成分组/聚合计算
df.groupby(by='year')[['lifeExp','pop','gdpPercap']].mean()
# 根据year分组,查看每年的life平均值,pop平均值和gpd平均值,用mean做聚合运算
也可以根据两个列分组,形成二维数据聚合
df.groupby(['continent'])['country'].nunique()
df.groupby('continent')['lifeExp'].max()
# 可以使用 nunique 方法 计算Pandas Series的唯一值计数
# 可以使用 value_counts 方法来获取Pandas Series 的频数统计
df.groupby(‘continent’) → dataframeGroupby对象就是把continent取值相同的数据放到一组中 df.groupby(‘continent’)[字段] → seriesGroupby对象 从分号组的Dataframe数据中筛序出一列 df.groupby(‘continent’)[字段].mean() seriesGroupby对象再调用mean()/其它聚合函数