pandas_索引_df删除 行/列_切片(Series/df)

本文深入探讨Pandas库在Python数据分析中的高级应用,包括索引的重复与修改、缺失值处理、数据切片及筛选等核心功能。通过实例演示如何高效地管理和操作数据,适合对数据处理有高需求的研究者和开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引

  • pandas的索引对象可以包含重复的标签
  • DataFrame对象也可以有重复的columns或者index 但是请尽量不要这么做!
  • 索引可以再创建的时候设置,但是不可以创建好后更改为别的值
  • 更改索引,也是在原有索引范围内更改,多出的索引值自动填充 NaN 或者指定填充值

缺失值指定填充方式method参数,比如ffill表示向前填充,bfill表示向后填充

import pandas as pd
obj = pd.Series(range(3),index = ['a','b','c'])
obj2=obj.reindex(['c','b','a','w'],method='ffill')
print(obj2)
>>>
c    2
b    1
a    0
w    2
dtype: int64
  • DataFrame这种二维对象,如果执行reindex方法时只提供一个列表参数,则默认是修改行索引。可以用关键字参数columns指定修改的是列索引

DataFrame删除 行/列

通过drop方法,可以删除Series的一个元素,
或者DataFrame的一行或一列。
默认情况下,drop方法按行删除,且不会修改原数据,但指定axis=1则按列删除,指定inplace=True则修改原数据

----------------------------------pandas-----------------------------
创建s矩阵 s= pd.Series(np.arange(5),index=list('abcde'))
s:
a    0
b    1
c    2
d    3
e    4
dtype: int32


删除索引为c的行 
new_s = s.drop('c')
new_s
a    0
b    1
d    3
e    4
dtype: int32

矩阵s不随之改变:
a    0
b    1
c    2
d    3
e    4
dtype: int32


------------------------------------DataFrame---------------------------------------
创建矩阵df:df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['one','two','three','four'])
    one  two  three  four
0    0    1      2     3
1    4    5      6     7
2    8    9     10    11
3   12   13     14    15

删除索引为2的行:
df.drop(2)
   one  two  three  four
0    0    1      2     3
1    4    5      6     7
3   12   13     14    15

指定删除列,而不是默认的行
df.drop('two',axis = 1)  
   one  three  four
0    0      2     3
1    4      6     7
2    8     10    11
3   12     14    15


原始数据不随之改变 
df
   one  two  three  four
0    0    1      2     3
1    4    5      6     7
2    8    9     10    11
3   12   13     14    15


原始数据随之改变
df.drop(2,inplace=True) 
df
   one  two  three  four
0    0    1      2     3
1    4    5      6     7
3   12   13     14    15

切片

Series

建立一个原始一维数据

import pandas as pd
import numpy as np

se = pd.Series(np.linspace(1,4,5),index=list('abcde'))
print(se)
>>>
a    1.00
b    1.75
c    2.50
d    3.25
e    4.00
dtype: float64

使用建立的索引查看
带‘,‘号查看的索引位置 要使用两个括号‘[[ ]]’
单独查看单个索引的值 一般都是 隐性索引(隐藏索引值显示)

#-------------------------------------------------------------

#-------------------------------------------------------------
print(se['b']) #使用建立时的索引
>>>1.75   # 隐性索引(不显示索引值)

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
print(se[['b','c','d']]) #使用建立时的索引
>>>
b    1.75
c    2.50
d    3.25
dtype: float64 #显性索引 显示索引值

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
print(se['b':'c'])
>>>
b    1.75
c    2.50
dtype: float64  #显性索引 显示索引值

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
se['b':'c']=6  #更改索引对应的值 #左闭右也闭
print(se)
>>>
a    1.00
b    6.00
c    6.00
d    3.25
e    4.00
dtype: float64 #显性索引 显示索引值

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
se['b','c']=66 #更改索引对应的值
print(se)
>>>
    a     1.00
    b    66.00
    c    66.00
    d     3.25
    e     4.00
    dtype: float64 # 显性索引 显示索引值

使用默认的索引查看
带‘,‘号查看的索引位置 要使用两个括号‘[[ ]]’
单独查看单个索引的值 一般都是 隐性索引(隐藏索引值显示)

#-------------------------------------------------------------

#-------------------------------------------------------------
print(se[2])
>>>2.5 #隐性索引(不显示索引值)

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
print(se[[1,3]]) #注意双括号“[[ ]]”
>>>
    b    1.75
    d    3.25
    dtype: float64 #显性索引 显示索引值
    
#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
print(se[2:4]) #左闭右开
>>>
    c    2.50
    d    3.25
    dtype: float64 #显性索引 显示索引值

#-------------------------------------------------------------
print('--'*20)
#-------------------------------------------------------------
print(se[se>2]) #对值比较 显示符合要求的数据
>>>
    c    2.50
    d    3.25
    e    4.00
    dtype: float64 #显性索引 显示索引值

DataFrame

建立原始数据

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=['one','two','three','four'])
print(df)
>>>
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11
d   12   13     14    15

切片 - 列
带‘,‘号查看的索引位置 要使用两个括号‘[[ ]]’
单独查看单个列的值 一般都是 隐性索引(隐藏索引值显示)

#-------------------------------------------------------------
print(df['two'])
>>>
a     1
b     5
c     9
d    13
Name: two, dtype: int32 #隐藏表头
#-------------------------------------------------------------
print(df[['two','one']])
>>>
   two  one
a    1    0
b    5    4
c    9    8
d   13   12 #显示表头
#-------------------------------------------------------------
print(df['two':'one'])
>>>#无法按照列名的范围去切片

#-------------------------------------------------------------
print(df<5)
>>>
     one    two  three   four
a   True   True   True   True
b   True  False  False  False
c  False  False  False  False
d  False  False  False  False  #布尔值判断显示表头

#-------------------------------------------------------------
df[df<5]=0
print(df)
>>>
   one  two  three  four
a    0    0      0     0
b    0    5      6     7
c    8    9     10    11
d   12   13     14    15  #符合条件的数据 改变其数据值

切片 - 行
不可以直接切片索引行 (原始索引/建立索引都不可以)
例:print(df[‘b’]) 会报错

print(df[:2])
>>>
   one  two  three  four
a    0    1      2     3
b    4    5      6     7  #显示表头
 
 #-------------------------------------------------------------
print(df['c':'d']) #左闭右也闭
>>>
   one  two  three  four
c    8    9     10    11
d   12   13     14    15   #显示表头

DataFrame函数查看行切片
老版本的ix标签已经不提倡使用了

原始数据 df
   one  two  three  four
a    0    0      0     0
b    0    5      6     7
c    8    9     10    11
d   12   13     14    15

#-------------------------------------------------------------

df.loc['b', ['two','four']]  # 使用显式索引值,用逗号分隔行和列参数
>>>
two     5
four    7
Name: b, dtype: int32

#-------------------------------------------------------------

df.loc['b':, 'two':'four']  # 切片方式,注意区间
>>>
   two  three  four
b    5      6     7
c    9     10    11
d   13     14    15

#-------------------------------------------------------------

df.iloc[2, [3, 0, 1]]  # 用隐含的整数索引检索,但是这个打印格式好别扭
>>>
four    11
one      8
two      9
Name: c, dtype: int32

#-------------------------------------------------------------

df.iloc[2]
>>>
one       8
two       9
three    10
four     11
Name: c, dtype: int32

#-------------------------------------------------------------

df.iloc[1:,2:3] # 注意区间
>>>
   three
b      6
c     10
d     14

#-------------------------------------------------------------

df.iloc[:,:3][df.three>5]  # 先切片,再布尔判断
>>>
   one  two  three
b    0    5      6
c    8    9     10
d   12   13     14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值