Pandas的数据结构
Series对象
class pandas.Series(data=None, index=None)
data
参数
含义:
data
是Series
构造函数中最主要的参数,它用来指定要存储在Series
中的数据。数据类型:
data
可以是多种数据类型,例如:
Python 列表(list)或元组(tuple),如pd.Series([1, 2, 3])或pd.Series((4, 5, 6))。
NumPy 数组,例如pd.Series(np.array([7, 8, 9]))。
标量值(单个数值、字符串等),如pd.Series(5, index=[0, 1, 2]),这将创建一个包含相同标量值的Series。
字典(dictionary),字典的键将作为Series的索引(如果未另外指定索引),字典的值作为Series的数据,例如pd.Series({'a': 10, 'b': 20})。
index
参数
含义:index参数用于指定Series的索引,它定义了数据的标签。
数据类型:
可以是一个Index对象(这是pandas中专门用于表示索引的数据结构),例如pd.Index(['x', 'y', 'z'])可以作为索引传递给Series。
也可以是其他类似序列的数据类型,如列表、元组等,例如pd.Series([100, 200, 300], index=['m', 'n', 'o'])。
索引长度要求:index的长度必须与data的长度相同(当data是列表、数组等有序数据结构时)。如果data是标量,index的长度决定了Series的长度。例如,data为标量值5,index为[0, 1, 2],则会生成一个包含三个元素值都为5的Series。
通过numpy.ndarray数组来创建
# 0 创建 numpy.ndarray数组
import numpy as np
arr = np.array([3, 6, 9])
arr
# 1 通过 numpy.ndarray数组 来创建 Series对象(默认 索引)
import pandas as pd
s1 = pd.Series(arr)
s1
# 2 通过 numpy.ndarray数组 来创建 Series对象(指定 索引 类型)
s2 = pd.Series(arr, index=['x', 'y', 'z'])
s2
通过list列表来创建
# 导包 pandas
import pandas as pd
# 创建含字符串和整数的 Series 对象,,自动生成索引
s1 = pd.Series(['张三', 13])
print(s1)
print("-" * 50)
print(type(s1))
# 创建含两个字符串的 Series,自动生成索引
s2 = pd.Series(['李四', '北京'])
print(s2)
print("-" * 50)
print(type(s2))
# 创建含两个整数的 Series,自动生成索引
s3 = pd.Series([18, 15000])
print(s3)
print("-" * 50)
print(type(s3))
# 创建含有姓名和城市的 Series,自定义索引
s4 = pd.Series(["王五", "郑州"], index=['姓名', '城市'])
print(s4)
print("-" * 50)
print(type(s4))
通过元组或字典创建 Series 对象
# 1 使用元组 创建 Series 对象
import pandas as pd
s1 = pd.Series(('张三', '李四', '王五'), index=['a', 'b', 'c'])
print(s1)
print("-" * 50)
print(type(s1))
# 2 使用字典 创建 Series 对象
dict1 = {
"name" : "悟空",
"age" : 23,
"skill" : "火眼金睛"
}
s2 = pd.Series(dict1, index=['name', 'age'])
print(s2)
print("-" * 50)
print(type(s2))
Series对象常用属性和方法
常见属性
属性 | 说明 |
loc | 使用索引值取子集 |
iloc | 使用索引位置取子集 |
dtype或dtypes | Series内容的类型 |
T | Series的转置矩阵 |
shape | 数据的维数 |
size | Series中元素的数量 |
values | Series的值 |
常见方法
方法 | 说明 |
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个值 |
import pandas as pd
# 创建s对象
s1 = pd.Series(data=[1, 2, 3, 4, 2, 3], index=['E', 'F', 'A', 'B', 'C', 'D'])
print(s1)
print('=================== 常用属性 ===================')
# 查看s对象值数量
print("size: ", s1.size)
# 查看s对象维度, 返回一个单个元素的元组, 元素个数代表维度数, 元素值代表值数量
print("shape: ", s1.shape)
# 查看s对象数据类型
print("dtype: ", s1.dtype)
# 获取s对象的数据值, 返回numpy的ndarray数组类型
print('values: ', s1.values)
# 获取s对象的索引
print('index: ', s1.index)
print('=================== 常用方法 ===================')
# 查看s对象值数量
print(s1.value_counts())
# 查看s对象前5个值, n默认等于5
print(s1.head(3))
# 查看s对象后5个值, n默认等于5
s1.tail(3)
# 获取s对象的索引
print(s1.keys())
# s对象转换成python列表
print(list(s1))
# s对象转换成df对象
print(s1.to_frame())
print(type(s1.to_frame()))
# s对象中数据的基础统计信息
print(s1.describe())
# print('------------------------------')
# s对象最大值、最小值、平均值、求和值...
print(s1.max())
print(s1.min())
print(s1.mean())
print(s1.sum())
# s对象数据值去重, 返回s对象
print(s1.drop_duplicates())
print(type(s1.drop_duplicates()))
print('------------------')
# s对象数据值去重, 返回数组
print(s1.unique())
print(type(s1.unique()))
# s对象数据值排序, 默认升序
print(s1.sort_values())
# print('----------------------------------')
print(s1.sort_values(ascending=False))
# s对象索引值排序, 默认升序
print(s1.sort_index())
# print('----------------------------------')
print(s1.sort_index(ascending=False))
# s对象不同值的数量, 类似于分组计数操作
s1.value_counts()
实例
import pandas as pd
# 1 加载并观察数据集
df = pd.read_csv('../data/a_scientists.csv')
df
# 2 获取年龄列
ages = df['Age']
ages
# 3 求平均年龄
ages.mean()
#%%
# 4 求高于平均年龄 组成 布尔结果
print(ages > ages.mean())
print('--------------------------------')
print(type(ages > ages.mean()))
print('--------------------------------')
print(list(ages > ages.mean()))
# 5 求高于平均年龄 组成 年龄列
print(ages[ages > ages.mean()])
print('------------------------')
print(ages[list(ages > ages.mean())])
求年龄大于平均值
ages > ages.mean()
df[ages > ages.mean()]