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)

相关推荐
果冻人工智能4 分钟前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工5 分钟前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
石小石Orz7 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
孤独且没人爱的纸鹤17 分钟前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭19 分钟前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~20 分钟前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码27 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
zhangfeng113327 分钟前
pytorch 的交叉熵函数,多分类,二分类
人工智能·pytorch·分类
Seeklike28 分钟前
11.22 深度学习-pytorch自动微分
人工智能·pytorch·深度学习
庞传奇29 分钟前
TensorFlow 的基本概念和使用场景
人工智能·python·tensorflow