一、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)