pandas——数据结构

一、series

(一)创建series

复制代码
import pandas as pd


#1.使用列表或数组创建Series
# 使用列表创建Series,索引默认从0开始
s1 = pd.Series([1, 2, 3])
print(s1)
# 使用列表和自定义索引创建Series
s2 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s2)

# 2.使用字典创建Series
# 使用字典创建Series,字典的键成为索引
s3 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s3)

#3.使用标量值创建Series
# 使用标量值创建Series,所有元素都是相同的值
s4 = pd.Series(5, index=['a', 'b', 'c'])
print(s4)

#4.使用pd.Series构造函数的参数
# 使用data参数和index参数创建Series
s5 = pd.Series(data=[1, 2, 3], index=['a', 'b', 'c'])
print(s5)

print('=============================================')
#5.创建具有时间索引的Series
# 创建一个时间序列
s6 = pd.Series([1, 2, 3], index=pd.date_range('20230101', periods=3))
print(s6)

#6.创建具有特定数据类型的Series
# 创建一个指定数据类型的Series
s7 = pd.Series([1, 2, 3], dtype='float32')
print(s7)

#7.创建具有缺失值的Series
# 创建一个包含缺失值的Series
s8 = pd.Series([1, None, 3], index=['a', 'b', 'c'])
print(s8)

#8.使用range对象创建Series
# 使用range对象创建Series
s9 = pd.Series(range(3), index=['a', 'b', 'c'])
print(s9)

#9.创建空的Series
# 创建一个空的Series
s10 = pd.Series([], index=pd.Index([], dtype='object'))
print(s10)

#10.创建具有复杂索引的Series
# 创建一个具有多级索引(MultiIndex)的Series
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['letter', 'number'])
s11 = pd.Series([1, 2, 3, 4], index=index)
print(s11)

(二)series---索引

1.索引的创建和默认值

  • 当创建一个Series时,如果不指定索引,Pandas会默认创建一个从0开始的整数索引。
  • 可以指定一个索引列表来创建Series,这样索引就与数据列表中的元素一一对应。

2.索引的类型

  • 索引可以是整数、字符串、日期或任何可哈希的对象。
  • Series的索引不必是连续的,也不要求索引值是唯一的。

3.索引的访问

  • 可以通过索引标签直接访问Series中的元素。
  • 使用.loc[].iloc[]方法可以基于标签和整数位置分别进行索引。

4.索引的修改

  • 可以给已存在的Series添加或修改索引。
  • 使用.reindex()方法可以根据新的索引列表重排Series

5.索引的重要性

  • 索引对于数据的选择、过滤和数据对齐至关重要。
  • 在进行数据聚合、分组操作时,索引标签可以提供额外的上下文信息。

6.时间序列索引

  • Series的索引是日期类型时,Pandas提供了丰富的时间序列功能,如重采样、时间窗口函数等。

7.索引的重置

  • 使用.reset_index()方法可以将Series的索引重置为默认的整数索引。

8.索引的删除

  • 可以通过.drop()方法删除具有特定索引标签的元素。

9.索引的检查和验证

  • 使用.is_monotonic.is_unique属性可以检查索引是否是单调递增或递减的,以及索引值是否唯一。

10.多级索引(MultiIndex)

  • Series可以拥有多级索引(也称为层次化索引),这允许Series拥有多个维度的索引,类似于二维表中的行和列。

11.索引的复制和设置

  • 使用.index属性可以获取索引的值,也可以设置新的索引值。
  • 使用.copy()方法可以创建一个索引的副本。

示例代码:

复制代码
import pandas as pd

# 创建一个带有自定义索引的Series
data = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(data)

# 访问索引
print(data.index)

# 通过索引标签访问数据
print(data['a'])

# 使用.loc[]访问数据
print(data.loc['a'])

# 修改索引
data.index = ['x', 'y', 'z', 'w']
print(data)

# 重置索引
reset_data = data.reset_index()
print(reset_data)

# 删除索引
data = data.drop('x')
print(data)

(三)series---切片

复制代码
import pandas as pd

'''
1.基本切片
使用冒号 : 可以进行切片操作,语法为 series[start:stop:step]。
start 是切片的起始索引(包含),stop 是终止索引(不包含),step 是步长。
'''
print('1.基本切片')
s1 = pd.Series([1, 2, 3, 4, 5, 6])
print(s1[1:4])  # 输出第二个到第四个元素(包含第二个,不包含第四个)
'''
2.使用标签进行切片
如果Series使用的是标签索引,可以直接使用标签进行切片。
'''
print('2.使用标签进行切片')
s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'c', 'd', 'e', 'f'])
print(s['b':'d'])  # 输出索引为'b'到'd'的元素
'''
3.使用位置进行切片
使用 .iloc[] 可以根据位置进行切片,它接受整数索引。
'''
print('3.使用位置进行切片')
print(s.iloc[1:4])  # 输出位置为1到3的元素(包含第一个,不包含第四个)
'''
4.结合布尔索引进行切片
可以使用布尔序列来筛选数据,这在Pandas中称为布尔索引。
'''
print('4.结合布尔索引进行切片')
print(s[s > 3])  # 输出所有值大于3的元素
'''
5.使用.loc[]进行切片
.loc[] 方法可以同时接受标签索引和条件,进行更为灵活的数据选择。
'''
print('5.使用.loc[]进行切片')
print(s.loc['b':'d'])  # 输出索引为'b'到'd'的元素
# 使用.loc[]进行切片,条件需要用括号括起来,并使用&连接
print(s.loc[(s.index > 'b') & (s.index < 'd')])  # 输出索引在'b'和'd'之间的元素
'''
6.负数索引进行切片
可以使用负数索引从末尾开始选择元素。
'''
print('6.负数索引进行切片')
print(s.iloc[-3:-1])  # 输出倒数第三个到倒数第二个元素
'''
7.切片时保留索引
当对Series进行切片操作时,返回的子集会保留原始的索引。
'''
print('7.切片时保留索引')
print(s[1:4])
'''
8.切片时忽略索引
如果需要,可以在切片后重置索引,使用 .reset_index(drop=True) 方法。
'''
print('8.切片时忽略索引')
print(s[1:4].reset_index(drop=True))

注意事项

  • 当使用非整数的标签索引进行切片时,如果索引不连续或有缺失值,可能会导致意外的结果。
  • 切片操作返回的是原始Series的视图,除非进行特定的修改操作,否则原始数据不会被改变。

(四)series---名字

复制代码
import pandas as pd

'''
1.设置名字
在创建Series时,可以通过name参数来设置序列的名字。
'''
print('1.设置名字')
# 创建一个带有名字的Series
s = pd.Series([1, 2, 3, 4], name='my_series')
print(s)
'''
2.访问名字
可以通过Series对象的name属性来访问序列的名字。
'''
print('2.访问名字')
print(s.name)  # 输出 'my_series'
'''
3.修改名字
序列创建后,可以通过修改name属性来更改序列的名字。
'''
print('3.修改名字')
s.name = 'new_name'
print(s.name)  # 输出 'new_name'
'''
4.无名字的Series
如果在创建Series时没有指定name参数,那么name属性将为None。
'''
print('4.无名字的Series')
s = pd.Series([1, 2, 3, 4])
print(s.name)  # 输出 None
'''
5.名字在DataFrame中的作用
当将Series转换为DataFrame时,Series的名字将成为列的名字。
'''
print('5.名字在DataFrame中的作用')
df = pd.DataFrame(s, columns=['value'])
print(df)
'''
6.名字在聚合操作中的作用
在执行聚合操作时,Series的名字可以用来指定聚合结果的索引。
'''
print('6.名字在聚合操作中的作用')
print(s.sum())  # 默认使用Series的名字作为结果的索引名称

(五)常见操作

复制代码
import pandas as pd


#1.创建 Series
print('1.创建 Series')
# 从列表创建 Series
s = pd.Series([1, 2, 3, 4])
# 从字典创建 Series,字典的键成为索引
s1 = pd.Series({'a': 1, 'b': 2, 'c': 3})
# 从 ndarray 创建 Series
import numpy as np
s2 = pd.Series(np.array([1, 2, 3, 4]))

# 2.访问 Series 数据
print('2.访问 Series 数据')
# 访问单个值
print(s[0])
# 访问多个值
print(s[[0, 2]])
# 使用 loc 访问基于标签的索引
print(s1.loc['a'])
# 使用 iloc 访问基于整数位置的索引
print(s.iloc[0])

#3.修改 Series 数据
print('3.修改 Series 数据')
# 修改单个值
s[0] = 10
print(s)
# 修改多个值
s[[1, 2]] = [20, 30]
print(s)
# 修改基于标签的索引
s1.loc['a'] = 100
print(s1)

#4.Series 的描述性统计
print('4.Series 的描述性统计')
# 求和
print(s.sum())
# 均值
print(s.mean())
# 中位数
print(s.median())
# 最大值和最小值
print(s.max())
print(s.min())
# 标准差
print(s.std())
# 方差
print(s.var())

#5.Series 的数学运算
print('5.Series 的数学运算')
# 加法
print(s + 2)
# 乘法
print(s * 2)
# 除法
print(s / 2)
# 幂运算
print(s ** 2)

#6.Series 的布尔运算
print('6.Series 的布尔运算')
# 大于某个值
print(s > 2)
# 小于某个值
print(s < 2)
# 等于某个值
print(s == 2)
# 不等于某个值
print(s != 2)

#7.Series 的比较
print('7.Series 的比较')
# 与另一个 Series 比较
other_s = pd.Series([3, 4, 5, 6], index=['x', 'y', 'z', 'w'])
# print(s == other_s)#报错

#8.使用range对象创建Series
print('8.使用range对象创建Series')
# 使用range对象创建Series
s9 = pd.Series(range(3), index=['a', 'b', 'c'])
print(s9)

#9.Series 的重组
print('9.Series 的重组')
# 添加新列
s['new_column'] = [5, 6, 7, 8]
print(s)
# 删除列
s.drop('new_column',inplace=True)
print(s)

#10.Series 的值计数
print('10.Series 的值计数')
# 计数每个值出现的次数
print(s.value_counts())

#11.Series 的唯一值
# 获取 Series 中的唯一值
print('11.Series 的唯一值')
print(s.unique())

#12.Series 的排序
print('12.Series 的排序')
# 排序
print(s.sort_values())

#13.Series 的缺失数据处理
print('13.Series 的缺失数据处理')
# 填充缺失值
s.fillna(0, inplace=True)
print(s)
# 删除缺失值
s.dropna(inplace=True)
print(s)

相关推荐
用户Taobaoapi201433 分钟前
母婴用品社媒种草效果量化:淘宝详情API+私域转化追踪案例
大数据·数据挖掘·数据分析
用户Taobaoapi201436 分钟前
Taobao agent USA丨美国淘宝代购1688代采集运系统搭建指南
数据挖掘·php
风铃喵游37 分钟前
让大模型调用MCP服务变得超级简单
前端·人工智能
booooooty1 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
PyAIExplorer1 小时前
基于 OpenCV 的图像 ROI 切割实现
人工智能·opencv·计算机视觉
风口猪炒股指标1 小时前
技术分析、超短线打板模式与情绪周期理论,在市场共识的形成、分歧、瓦解过程中缘起性空的理解
人工智能·博弈论·群体博弈·人生哲学·自我引导觉醒
ai_xiaogui2 小时前
一键部署AI工具!用AIStarter快速安装ComfyUI与Stable Diffusion
人工智能·stable diffusion·部署ai工具·ai应用市场教程·sd快速部署·comfyui一键安装
聚客AI3 小时前
Embedding进化论:从Word2Vec到OpenAI三代模型技术跃迁
人工智能·llm·掘金·日新计划
weixin_387545643 小时前
深入解析 AI Gateway:新一代智能流量控制中枢
人工智能·gateway
大虫小呓3 小时前
Python 处理 Excel 数据 pandas 和 openpyxl 哪家强?
python·pandas