二、pandas入门
pandas入门
- 前言
- 一、Serise
- 1.1 创建 Serise 对象
- 1.1.1 自动生成索引的Serise 对象
- 1.1.2 指定索引的Serise 对象
- 1.1.3 元组跟字典创建Serise 对象
- 1.2 Serise 的常用属性
- 1.3 Serise 的常用方法
- 1.4 Serise 的布尔索引
- 1.5 Serise 的运算
- 二、DataFrame
- 2.1 创建DataFrame对象
- 2.1.1 字典方式创建DataFrame对象
- 2.1.2 列表+元祖方式创建DataFrame对象
- 2.2 DataFrame常用属性跟方法
- 2.2.1 基础演示
- 2.2.2 DataFrame的布尔索引
- 2.2.3 DataFrame的计算
- 2.3 DataFrame索引操作
- 2.3.1 set_index()函数 设置行索引名字
- 2.3.2 加载数据的时候, 直接指定索引列
- 2.3.3 reset_index()函数, 可以重置索引
- 2.3.4 DataFrame-修改行列索引
- 2.3.4.1 rename()函数, 可以对原有的行索引名 和 列名进行修改
- 2.3.4.2 把 index 和 columns属性提取出来, 修改之后, 再赋值回去
- 2.4 添加-删除-插入列
- 2.4.1 添加列
- 2.4.2 删除列
- 2.4.3 插入列
- 总结
前言
- Pandas 中只有列 或者 二维表, 没有行的数据结构 (
即使是行的数据, 也会通过列的方式展示
) - pamdas 中分为两大结构 分别是:Serise 和 DataFrame
一、Serise
- Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
1.1 创建 Serise 对象
- Series是一种类似于一维数组的对象,由下面两个部分组成:
- values:一组数据(numpy.ndarray类型)
- index:相关的数据行索引标签;如果没有为数据指定索引,于是会自动创建一个0到 N - 1 (N为数据的长度) 的整数型索引。
1.1.1 自动生成索引的Serise 对象
代码如下(示例):
import numpy as np
import pandas as pd# 创建numpy.ndarray对象
n1 = np.array([1, 2, 3])
print(n1) # [1 2 3]
print(type(n1)) # <class 'numpy.ndarray'># 创建Series对象
s1 = pd.Series(data=n1)
print(s1) # 0 1# 1 2# 2 3print(type(s1)) # dtype: int32# <class 'pandas.core.series.Series'># 直接创建
s2 = pd.Series(['banana', 42])
print(s2) # 0 banana# 1 42
print(type(s2)) # dtype: object# <class 'pandas.core.series.Series'>
1.1.2 指定索引的Serise 对象
代码如下(示例):
s2 = pd.Series(['张三','男'], index = ['Name', 'Gender'])
print(s2) # Name 张三# Gender 男# dtype: object
1.1.3 元组跟字典创建Serise 对象
代码如下(示例):
import pandas as pd# 使用元组
tuple1 = (1, 2, 3)
s1 = pd.Series(tuple1)
print(s1) # 0 1# 1 2# 2 3# dtype: int64# 使用字典 字典中的key值是Series对象的索引值,value值是Series对象的数据值
dict1 = {'A': 1, 'B': 2, 'C': 3}
s2 = pd.Series(dict1)
print(s2) # A 1# B 2# C 3# dtype: int64
1.2 Serise 的常用属性
属性 | 说明 |
---|---|
loc | 使用索引值取子集 |
iloc | 使用索引位置取子集 |
dtype或dtypes | Series内容的类型 |
T | Series的转置矩阵 |
shape | 数据的维数 |
size | Series中元素的数量 |
values | Series的值 |
index | Series的索引值 |
1.3 Serise 的常用方法
方法 | 说明 |
---|---|
append | 连接两个或多个Series |
corr | 计算与另一个Series的相关系数 |
cov | 计算与另一个Series的协方差 |
describe | 计算常见统计量 |
drop_duplicates | 返回去重之后的Series |
equals | 判断两个Series是否相同 |
get_values | 获取Series的值,作用与values属性相同 |
hist | 绘制直方图 |
isin | Series中是否包含某些值 |
min | 返回最小值 |
max | 返回最大值 |
mean | 返回算术平均值 |
median | 返回中位数 |
mode | 返回众数 |
quantile | 返回指定位置的分位数 |
replace | 用指定值代替Series中的值 |
sample | 返回Series的随机采样值 |
sort_values | 对值进行排序 |
to_frame | 把Series转换为DataFrame |
unique | 去重返回数组 |
value_counts | 统计不同值数量 |
keys | 获取索引值 |
head | 查看前5个值 |
tail | 查看后5个值 |
1.4 Serise 的布尔索引
代码如下(示例):
import pandas as pddf = pd.read_csv('文件路径.csv')
# 加入文件有八列的话 只有是True的那列能取到, 如果比八列多的话,多的部分用NAN填充
bool_values = [False, True, True, False, False, False, True, False]
df[bool_values]
1.5 Serise 的运算
- Series 和数值型变量计算时,变量会与Series中的每个元素逐一进行计算
- 两个Series之间计算时,索引值相同的元素之间会进行计算;索引值不同的元素的计算结果会用NaN值(缺失值)填充
二、DataFrame
- DataFrame是一个表格型的结构化数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。
- DataFrame是Pandas中的最基本的数据结构对象,简称df;可以认为df就是一个二维数据表,这个表有行有列有索引
- DataFrame是Pandas中最基本的数据结构,Series的许多属性和方法在DataFrame中也一样适用.
2.1 创建DataFrame对象
2.1.1 字典方式创建DataFrame对象
代码如下(示例):
import pandas as pddict_data = {'id': [1, 2, 3],'name': ['张三', '李四', '王五'],'age': [18, 20, 22]
}
# 使用默认自增索引
# 字典中的key值是df对象的列名,value值是对应列的数据值
df1 = pd.DataFrame(data=dict_data)
print(df1) # id name age# 0 1 张三 18# 1 2 李四 20# 2 3 王五 22
print(type(df1)) # <class 'pandas.core.frame.DataFrame'># 通过index参数指定索引, columns参数指定列的位置
df2 = pd.DataFrame(data=dict_data, index=['A', 'B', 'C'], columns=['id', 'age', 'name'])
print(df2) # id name age# A 1 张三 18# B 2 李四 20# C 3 王五 22
2.1.2 列表+元祖方式创建DataFrame对象
代码如下(示例):
list_data = [(1, '张三', 18),(2, '李四', 20),(3, '王五', 22)]
df3 = pd.DataFrame(data=list_data,index=['A', 'B', 'C'], # 手动指定索引columns=['id', 'name', 'age']) # 手动指定列名
print(df3) # id name age# A 1 张三 18# B 2 李四 20# C 3 王五 22
2.2 DataFrame常用属性跟方法
2.2.1 基础演示
代码如下(示例):
import pandas as pd# 加载数据集, 得到df对象
df = pd.read_csv('文件地址')print('=============== 常用属性 ===============')
# 查看维度, 返回元组类型 -> (行数, 列数), 元素个数代表维度数
print(df.shape)
# 查看数据值个数, 行数*列数, NaN值也算
print(df.size)
# 查看数据值, 返回numpy的ndarray类型
print(df.values)
# 查看维度数
print(df.ndim)
# 返回列名和列数据类型
print(df.dtypes)
# 查看索引值, 返回索引值对象
print(df.index)
# 查看列名, 返回列名对象
print(df.columns)
print('=============== 常用方法 ===============')
# 查看前5行数据
print(df.head())
# 查看后5行数据
print(df.tail())
# 查看df的基本信息
df.info()
# 查看df对象中所有数值列的描述统计信息
print(df.describe())
# 查看df对象中所有非数值列的描述统计信息
# exclude:不包含指定类型列
print(df.describe(exclude=['int', 'float']))
# 查看df对象中所有列的描述统计信息
# include:包含指定类型列, all代表所有类型
print(df.describe(include='all'))
# 查看df的行数
print(len(df))
# 查看df各列的最小值
print(df.min())
# 查看df各列的非空值个数
print(df.count())
# 查看df数值列的平均值
print(df.mean())
2.2.2 DataFrame的布尔索引
- 跟Series一样
2.2.3 DataFrame的计算
- 跟Series一样
2.3 DataFrame索引操作
2.3.1 set_index()函数 设置行索引名字
data = pd.read_csv('文件路径')
data.head()data1 = data.set_index('写要设为索引的列名')# 如果加上 inplace=True, 则会修改原始的df对象
data.set_index(写要设为索引的列名', inplace=True)
data.head() # 原始的数据并没有发生改变.
2.3.2 加载数据的时候, 直接指定索引列
代码如下(示例):
import pandas as pd
pd.read_csv('文件路径', index_col = '要设为索引的列名')
2.3.3 reset_index()函数, 可以重置索引
代码如下(示例):
# 加上inplace, 就是直接修改 源数据.
data.reset_index(inplace=True)
data.head()
2.3.4 DataFrame-修改行列索引
2.3.4.1 rename()函数, 可以对原有的行索引名 和 列名进行修改
代码如下(示例):
data = pd.read_csv('文件路径', index_col='要设置为索引的列名')
data.index[:5] # 前5个行索引名data.columns[:5] # 前5个列名# 手动修改下 行索引名 和 列名
idx_rename = {'旧列名': '新列名', '旧列名': '新列名'}
col_rename = {'旧列名': '新列名', '旧列名': '新列名'}# 通过rename()函数, 对原有的行索引名 和 列名进行修改
data.rename(index=idx_rename, columns=col_rename).head()
2.3.4.2 把 index 和 columns属性提取出来, 修改之后, 再赋值回去
- index类型不能直接修改,需要先将其转成列表, 修改列表元素, 再整体替换
代码如下(示例):
data = pd.read_csv('文件路径', index_col='指定哪一列为索引列')# 提取出 行索引名 和 列名, 并转成列表.
index_list = data.index.tolist()
columns_list = data.columns.tolist()# 修改列表元素值
index_list[0] = '新列名'
index_list[1] = '新列名'columns_list[0] = '新行名'
columns_list[1] = '新行名'# 重新把修改后的值, 设置成 行索引 和 列名
data.index = index_list
data.columns = columns_list# 查看数据
data.head(5)
2.4 添加-删除-插入列
2.4.1 添加列
- 通过 df [列名] = 值 的方式, 可以给df对象新增一列, 默认: 在 df 对象的最后添加一列
2.4.2 删除列
代码如下(示例):
data.drop('列名') # 报错, 需要指定方式, 按行删, 还是按列删.
data.drop('列名', axis='columns') # 按列删
data.drop('列名', axis=1) # 按列删, 这里的1表示: 列data.head().drop([0, 1]) # 按行索引删, 即: 删除索引为0和1的行
2.4.3 插入列
- 有点特殊, 没有inplace参数, 默认就是在原始df对象上做插入的
代码如下(示例):
# insert() 表示插入列. 参数解释: loc:插入位置(从索引0开始计数), column=列名, value=值
# 新一列的值 还可以由原表中的两列运算所得
data.insert(loc=1, column='列名', value=data['列名'] - data['列名'])
data.head()
总结
- 文章总结了pandas中Series和DataFrame两个结构的属性和功能,以后碰到相关内容可以来这查看。