DataFrame 是一个表格型的数据结构,它含有一组有序的列,既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
七、Series
类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成
八、DataFrame
类似于一个二维表格,是 Pandas 中最重要的数据结构。可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作
九、Pandas安装
Pandas 是一个基于 Python 的库
使用 pip 安装 pandas:
pip install pandas
安装成功后,我们就可以导入 pandas 模块使用:
import pandas as pd
十、Series特点
一维数组:只有一个轴(或维度),类似于 Python 中的列表
索引: 每个 Series 都有一个索引,可以是整数、字符串类型,如果不指定索引,默认创建一 个从 0 开始的整数索引
数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串、Python 对象等
操作:Series 支持各种操作,如数学运算、统计分析、字符串处理等
缺失数据:Series 可以包含缺失数据,使用NaN来表示缺失或无值
十一、创建Series
使用 Series() 构造函数创建 Series 对象,传递一个数据数组和一个可选的索引数组
使用列表创建 Series
s = pd.Series([1, 2, 3, 4])
使用 NumPy 数组创建 Series
s = pd.Series(np.array([1, 2, 3, 4]))
使用字典创建 Series
s = pd.Series({‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4})
import pandas as pd
import numpy as np
print(pd.__version__)''' 2.2.2 '''
s = pd.Series(['aa','bb','cc'])print(s)print(type(s))print(s.dtype)
s = pd.Series(np.arange(10))print(s)
s = pd.Series({'a':11,'c':33,'b':44})print(s['a'])
十二、基本操作-1
创建 Series 并指定索引
s = pd.Series([1, 2, 3, 4], index=[‘a’, ‘b’, ‘c’, ‘d’])
获取单个值
print(s[‘a’]) # 返回索引标签 ‘a’ 对应的元素
print(s[0])
获取多个值
print(s[‘a’:‘c’]) # 返回索引标签 ‘a’ 到 ‘c’ 之间的元素
print(s[0:3])
索引和值的对应关系
for index, value in s.items():
print(f"Index: {index}, Value: {value}")
s = pd.Series(data =[1,2,3,4], index =['a','b','c','d'])print(s)print(s['a'])print(s[0])print(s[1:2])print(s['a':'c'])for v in s:print(v)for v in s.values:print(v)for i in s.index:print(i)for i, v in s.items():print(i, v)print(type(s.values))print(type(s.index))print(type(s.items()))
十三、基本操作-2
使用切片语法来访问 Series 的一部分
print(s[:3]) # 返回前三个元素
为特定的索引标签赋值
s[‘a’] = 10 # 将索引标签 ‘a’ 对应的元素修改为 10
通过赋值给新的索引标签来添加元素
s[‘e’] = 5 # 在 Series 中添加一个新的元素,索引标签为 ‘e’
使用 del 删除指定索引标签的元素。
del s[‘a’] # 删除索引标签 ‘a’ 对应的元素
使用 drop 方法删除一个或多个索引标签,并返回一个新的 Series。
s_dropped = s.drop([‘a’,‘b’]) # 返回一个删除了索引标签 ‘b’ 的新 Series
s = pd.Series(data =[1,2,3,4], index =['a','b','c','d'])print(s[:3])print(s[0:3:2])print(s)
s['a']=10print(s)
s['e']=5print(s)del s['a']print(s)
s = s.drop(['a','b'])print(s)
十四、练习
# 创建 Series 对象,数据是 "Google", "Baidu", "Wiki",索引# 是"g", "b", "w"# 添加以下数据"Yahoo", "Taobao",索引是"y", "t"# 将"t"索引对应的数据更新为"Tencent"# 找出前3个数据# 删除第2个数据# 遍历所有数据
s = pd.Series(data =["Google","Baidu","Wiki"], index =["g","b","w"])print(s)
s["y"]="Yahoo"
s["t"]="Taobao"print(s)
s["t"]="Tencent"print(s)
r = s[:3]print(r)del s['b']print(s)for i in s.values:print(i)for v in s:print(v)
十五、基本运算
算术运算
result = series * 2 # 所有元素乘以2
过滤
filtered_series = series[series > 2] # 选择大于2的元素
数学函数
import numpy as np
result = np.sqrt(series) # 对每个元素取平方根
s = pd.Series(data =[1,2,3,4], index =['a','b','c','d'])print(s)print(s *2)print(s + s)print(s[s >3])print(s[s <3])print(s[s >5])
s = pd.Series([16,25,36])
r = np.sqrt(s)
r = r.astype(int)print(r)
十六、属性和方法-1
获取索引
index = s.index
获取数据
values = s.values
获取描述统计信息
stats = s.describe()
获取最大值和最小值的索引
max_index = s.idxmax()
min_index = s.idxmin()
s = pd.Series(data =[1,6,3,4], index =['a','b','c','d'])print(s.describe())print(type(s.describe()))print(s.describe()['max'])print(s.describe().max())print(s[s.idxmax()])print(s.max())
十七、属性和方法-2
print(s.dtype) # 数据类型
print(s.shape) # 形状
print(s.size) # 元素个数
print(s.count()) #元素个数
print(s.head()) # 前几个元素,默认是前 5 个
print(s.tail()) # 后几个元素,默认是后 5 个
print(s.sum()) # 求和
print(s.mean()) # 平均值
print(s.std()) # 标准差
print(s.min()) # 最小值
print(s.max()) # 最大值
# type(s):返回整个s 的类型, #s.dtype:表示s中数据的类型 #type(s[200]):表示索引对应的值的类型
s = pd.Series([100,"abc",True,False], index =[True,False,"def",200])print(s)print(type(s), s.dtype,type(s[200]))
s = pd.Series([[1,2,3],[4,5,6]])print(s.shape)
n = np.array([[1,2,3],[4,5,6]])print(n.shape)
s = pd.Series([[1,2,3],[4,5,6]])print(s.size)
s = pd.Series([11,22,33,44,55,66])# 默认返回前五位或者后五位print(s.head())print(s.tail())print(s.head(3), s[:3])print(s.tail(3), s[s.size -3:])
s = pd.Series([1,2,3,4,5])print(s.sum())print(s.count())print(s.sum()/s.count(), s.mean())print(s.std())print(s.max(), s.min(), s.median(), np.percentile(s,50))
s = pd.Series([[1,2],3,[[4],5]])print(s.size, s.count())
十八、属性和方法-3
使用布尔表达式:
print(s > 2) # 返回一个布尔 Series,其中的元素值大于 2
转换数据类型:
s = s.astype(‘float64’) # 将 Series 中的所有元素转换为 float64类型
# 将城市信息保存到Series中
data = pd.Series(['成都','大连','上海','北京','杭州','北京','大连','成都','深圳','上海','成都','大连','上海','北京','深圳','北京','大连','成都','深圳','上海','沈阳','沈阳','长春','太原','大连','北京','北京'])print(data)# 统计城市名称出现的次数
r = data.value_counts()print(r,type(r))# 将城市名按照出现的次数升序排列
r = data.value_counts().sort_values()print(r)# 输出城市名出现的次数的平均值
r = data.value_counts().mean()print(r)# 先降序排列,再输出前5个出现次数最多城市信息
r = data.value_counts().sort_values(ascending=False).head(5)print(r)
r = data.value_counts().sort_values().tail(5)print(r)# 输出排名2~4的城市信息
r = data.value_counts().sort_values(ascending=False).iloc[1:4]print(r)
r = data.value_counts().sort_values(ascending=False)print(r)
r = r[r >3]print(r)