pandas 索引切片

本文介绍了如何在 pandas 的 Series 和 DataFrame 中进行索引切片操作,特别是针对 DataFrame 中选取连续多列的方法,强调了使用高级索引来实现这一功能。

pandas 索引切片

Series

ser1=pd.Series(range(10,15),index=list('ABCDE'))
print(ser1)
普通索引
print(ser1['A'])
print(ser1[0])
print('#############')
注意通过自定义索引的左闭右闭的,用默认索引(下标)是左闭右开的
print(ser1['A':'C'])
print(ser1[0:2])
print()
print('################')
不连续索引
print(ser1[['A','C','E']])
print(ser1[[0,2,3]])
print('###############')
条件索引
print(ser1[(ser1>12) & (ser1<15)])
print()
print(ser1[(ser1<12) | (ser1>15)])
print()
print(ser1[ser1!=13])
print()
print(ser1[~(ser1==13)])
print()
print('###############')
print()
ser2=pd.Series(range(10,15),index=range(1,6))
print(ser2)
print('###############')
这样定义索引无法取到下标0
try:
    print(ser2[0])
except Exception as e:
    print('error:',e)
    print()
print(ser2[1])

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

dataFrame

注意:默认不能直接和之前一样取连续多列,要使用高级索引实现

df1=pd.DataFrame(np.random.randint(10,50,(3,4)),index=list('ABC'),columns=list('abcd'))
普通索引
print(df1)
print()
这里取到的是一个series对象
print(df1['a'])
print(df1['a'].values)
print()
用行列索引取元素
print(df1['a']['B'])
print(df1['a'][1])
print()
取不连续多列
print(df1[['a','c']])
print()
取单行,注意这个方法取出的是一个DataFrame对象
print(df1['A':'A'])
print()
取连续多行
print(df1['A':'C'])
print('############')
print()
高级索引,这里是Series的例子
ser1=pd.Series(range(10,15),index=list('ABCDE'))
print(ser1.loc['B':'D'])
print(ser1.loc[['B','D']])
print('#############')
print()
dataFrame index参数高级索引
print(df1['A':'A'])
print(df1.loc['A'])
print()
取一列数据
print(df1['a'])
print(df1.loc[:,'a'])
print('#############')
print()
取连续多行
print(df1['A':'C'])
print(df1.loc['A':'C'])
print()
取连续多列
print(df1.loc[:,'a':'c'])
print()
取指定连续行列
print(df1.loc['B':'C','c':'d'])
print()
取不连续多行
print(df1.loc[['A','C']])
print()
取不连续多列
print(df1.loc[:,['a','c','d']])
print()
取指定行列(可指定顺序)
print(df1.loc[['A','C'],['a','d','c']])
print('#################')
print()
下标高级索引
print(df1.iloc[0,0])
print(df1.iloc[0:2])
print()
print(df1.iloc[:,0:3])
print(df1.iloc[[0,2],[0,3]])
print('##############')
print()

df1=pd.DataFrame(np.random.randint(10,20,(3,4)),index=list('ABC'),columns=list('abcd'))
print(df1)
print()
添加列
df1['e']=df1['d']*10
print(df1)
print()
添加行
df1.loc['D']=[1,2,3,4,5]
print(df1)
print()
添加列
df1['f']=df1['a']+df1['b']+df1['c']+df1['d']+df1['e']
print(df1)
print()
print('################')

print(df1)
print()
# 删除指定列
df2=df1.drop(['c','d'],axis=1)
print(df1)
print(df2)
print()
删除指定列
del df1['d']
print(df1)
#不能删除指定行
try:
    del df1.loc['A']
except Exception as e:
    print(e)

print()
print('#####################')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### Pandas 切片索引的使用方法及示例 Pandas 提供了强大的索引切片功能,使得我们可以灵活地访问 DataFrame 或 Series 中的数据。以下是 Pandas 切片索引的具体使用方法以及一些常见示例。 #### 基本概念 Pandas索引切片可以通过标签实现,而不是像 Python 列表那样基于位置[^1]。这意味着可以利用自定义的索引来选取特定范围内的数据。对于多层索引的情况,也可以通过多个层次进行精确的选择[^2]。 #### 单层索引切片 单层索引切片是最基础的操作之一。假设有一个简单的 Series 对象 `s`: ```python import pandas as pd data = {'A': 10, 'B': 20, 'C': 30, 'D': 40} s = pd.Series(data) print(s) ``` 输出如下: ``` A 10 B 20 C 30 D 40 dtype: int64 ``` 如果要对这个 Series 进行切片操作,则可以直接使用标签名作为边界条件: ```python result = s['B':'D'] print(result) ``` 输出结果为: ``` B 20 C 30 D 40 dtype: int64 ``` 注意,在 Pandas 中,切片操作包含右端点(即 `'D'`),这一点不同于标准 Python 列表的行为。 --- #### 多层索引切片 当处理具有多级索引(MultiIndex)的数据结构时,可以借助 `.xs()` 方法或者直接指定每一层的索引值来完成更复杂的切片操作。例如: ```python index = pd.MultiIndex.from_tuples([ ('one', 'a'), ('one', 'b'), ('two', 'a'), ('two', 'b') ], names=['first', 'second']) df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=index) print(df) ``` 输出结果为: ``` value first second one a 1 b 2 two a 3 b 4 ``` 如果我们想提取所有属于 `'one'` 层次下的记录,可以用以下方式: ```python subset = df.xs('one', level='first') print(subset) ``` 输出结果为: ``` value second a 1 b 2 ``` 另外,还可以组合不同级别的索引标签来进行更加精细的选择: ```python specific_value = df.loc[('two', 'a')] print(specific_value) ``` 输出结果为: ``` value 3 Name: (two, a), dtype: int64 ``` --- #### 隐式索引与显式索引的区别 除了基于标签的切片外,Pandas 还支持隐式的整数位置索引。这种情况下通常会用到 `.iloc[]` 方法。比如下面的例子展示了如何按照行号获取子集: ```python series_example = pd.Series([68, 12], index=['张三', '李四']) implicit_indexing = series_example.iloc[:1] print(implicit_indexing) ``` 输出结果为: ``` 张三 68 dtype: int64 ``` 这里需要注意的是,`.iloc[]` 不依赖于实际的索引名称而是严格依据数值型的位置参数工作。 --- #### 总结 无论是单一维度还是多重嵌套场景下,Pandas索引机制都提供了极大的灵活性去满足各种数据分析需求。掌握这些技巧有助于提高工作效率并简化代码逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值