完文章后,目录可以自动生成,如何生成可参考右边的帮助文档`
文章目录
一、pandas的数据结构
- DataFrame
- Series
- 索引列
- 索引名、索引值
- 索引下标、行号
- 数据列
- 列名
- 列值,具体的数据
- 索引列
- Series
其中最核心的就是Pandas中的两个数据结构:DataFrame和Series
二、series对象
Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象,series本身也具有索引。
Series是一种类似于一维数组的对象,由下面两个部分组成:
- values:一组数据(numpy.ndarray类型)
- index:相关的数据索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。
2.1.创建Series对象
代码如下(示例):
通过列表创建:
import pandas as pd
# 使用默认自增索引
s2 = pd.Series([1,2,3])
s2
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s3
结果如下:
代码如下(示例):
通过字典或元组创建:
test = (1,2,3,4,5,6)
s4 = pd.Series(test)
dist = {'A':1,'B':2,'C':3,'D':4,'E':5,'F':6}
s5 = pd.Series(dist )
s5
2.2.Series对象常用API
s6 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])
# s对象有多少个值,int
len(s6)
s6.size
# s对象有多少个值,单一元素构成的元组 (6,)
s6.shape
# 查看s对象中数据的类型
s6.dtypes
# s对象转换为list列表
s6.to_list()
# s对象的值 array([0, 1, 2, 3, 4, 5], dtype=int64)
s6.values
# s对象的值转换为列表
s6.values.tolist()
# s对象可以遍历,返回每一个值
for i in s6:
print(i)
# 下标获取具体值
s6[1]
# 返回前2个值,默认返回前5个
s6.head(2)
# 返回最后1个值,默认返回后5个
s6.tail(1)
# 获取s对象的索引 Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
s6.index
# s对象的索引转换为列表
s6.index.to_list()
# s对象中数据的基础统计信息
s6.describe()
# 返回结果及说明如下
#count 6.000000 # s对象一共有多少个值
#mean 2.500000 # s对象所有值的算术平均值
#std 1.870829 # s对象所有值的标准偏差
#min 0.000000 # s对象所有值的最小值
#25% 1.250000 # 四分位 1/4位点值
#50% 2.500000 # 四分位 1/2位点值
#75% 3.750000 # 四分位 3/4位点值
#max 5.000000 # s对象所有值的最大值
#dtype: float64
# 标准偏差是一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。
# 四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。
# series对象转换为df对象
s6.to_frame()
s6.reset_index()
三、DataFrame
3.1 创建DF对象
DataFrame的创建有很多种方式
- Serires对象转换为df:
s.to_frame()
以及s.reset_index()
- 读取文件数据返回df:
pd.read_csv('csv格式数据文件路径')
的方式获取了df对象 - 使用字典、列表、元组创建df:接下来就展示如何使用字段、列表、元组创建df
- 使用字典加列表创建df,使默认自增索引
df1_data = { '日期': ['2021-08-21', '2021-08-22', '2021-08-23'], '温度': [25, 26, 50], '湿度': [81, 50, 56] } df1 = pd.DataFrame(data=df1_data) df1
- 使用列表加元组创建df,并自定义索引
df2_data = [ ('2021-08-21', 25, 81), ('2021-08-22', 26, 50), ('2021-08-23', 27, 56)] df2 = pd.DataFrame( data=df2_data, columns=['日期', '温度', '湿度'], index = ['row_1','row_2','row_3'] # 手动指定索引) df2
- 使用字典加列表创建df,使默认自增索引
3.2 DataFrame对象常用API
DataFrame对象常用API与Series对象几乎相同
# 返回df的行数
len(df2)
# df中数据的个数
df2.size
# df中的行数和列数,元组 (行数, 列数)
df2.shape
# 返回列名和该列数据的类型
df2.dtypes
# 返回nparray类型的2维数组,每一行数据作为一维数组,所有行数据的数组再构成一个二维数组
df2.values
# 返回df的所有列名
df2.columns
# df遍历返回的只是列名
for col_name in df2:
print(col_name)
# 返回df的索引对象
df2.index
# 返回第一行数据,默认前5行
df2.head(5)
# 返回倒数第1行数据,默认倒数5行
df2.tail(5)
# 返回df的基本信息:索引情况,以及各列的名称、数据数量、数据类型
df2.info() # series对象没有info()方法
# 返回df对象中所有数字类型数据的基础统计信息
# 返回对象的内容和Series.describe()相同
df2.describe()
# 返回df对象中全部列数据的基础统计信息
df2.describe(include='all')
4.3 DataFrame对象的运算
当DataFrame和数值进行运算时,DataFrame中的每一个元素会分别和数值进行运算,但df中的数据存在非数值类型时不能做加减法
运算
两个DataFrame之间、以及df和s对象进行计算,和2个series计算一样,会根据索引的值进行对应计算:当两个对象的索引值不能对应时,不匹配的会返回NaN
- df和数值进行运算
f2 * 2 # 不报错
df2 + 1 # 报错,因为df2中有str类型(Object)的数据列
- df和df进行运算
# 索引完全不匹配
df1 + df2
# 构造部分索引和df2相同的新df
df3 = df2[df2.index!='row_3']
df3
# 部分索引相同
df2 + df3
# 返回结果如下
日期 温度 湿度
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
row_1 NaN NaN NaN
row_2 NaN NaN NaN
row_3 NaN NaN NaN
日期 温度 湿度
row_1 2021-08-21 25 81
row_2 2021-08-22 26 50
日期 温度 湿度
row_1 2021-08-212021-08-21 50.0 162.0
row_2 2021-08-222021-08-22 52.0 100.0
row_3 NaN NaN NaN
总结:在Pandas中,两个df对象如果进行加法运算,则要遵循以下原则:
① 索引相同,则相同索引行进行合并操作
② 索引不同,则也保留所有元素,但是元素值都设置为NaN
总结
在Pandas中,两个df对象如果进行加法运算,则要遵循以下原则:
① 索引相同,则相同索引行进行合并操作
② 索引不同,则也保留所有元素,但是元素值都设置为NaN