pandas---Series与DataFrame索引、切片;多层索引、索引的堆叠

这篇具有很好参考价值的文章主要介绍了pandas---Series与DataFrame索引、切片;多层索引、索引的堆叠。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Series的索引和切片

1.1 Series的索引:

可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时

返回的仍然是一个Series类型)。分为显示索引和隐式索引:

(1) 显式索引:

使用index中的元素作为索引值

使用.loc[ ]

s = pd.Series({'Python': 150, 'NumPy': 100, 'Pandas': 130})
s
NumPy     100
Pandas    130
Python    150
dtype: int64
# 显示索引: 使用索引名
print(s['Python'])   # 值,int类型
print(s.NumPy)

# 使用2个中括号得到的类型:Series
 # 一次取多个元素
s[['Pandas', 'NumPy']] 
s[['Pandas']]

# 使用 loc[]
print(s.loc['Python'])
print(s.loc[['Pandas', 'NumPy']])
s.loc[['Pandas']]
150
100
150
Pandas    130
NumPy     100
dtype: int64
Pandas    130
dtype: int64

(2) 隐式索引:

使用整数作为索引值

使用.iloc[ ]

# 隐式索引:使用数字下标
print(s[0])
print(s[[0, 2]])
print(s[[0]])

# 使用 iloc[]
s.iloc[0]
print(s.iloc[[0, 2]])
print(s.iloc[[0]])

# 下面这2个写法是错误的
# s.iloc['Python']
# s.loc[0]
100
NumPy     100
Python    150
dtype: int64
NumPy    100
dtype: int64
NumPy     100
Python    150
dtype: int64
NumPy    100
dtype: int64

1.2 Series的切片

s = pd.Series({
    '语文': 100, 
    '数学': 150,
    '英语': 110,
    'Python': 130,
    'Pandas': 150,
    'NumPy': 150
})
# 切片
# Series是一维数组
# 隐式切片:  左闭右开
s[1 : 4]
s.iloc[1 : 4]
# 显式切片: 左闭右闭
s['数学' : 'Python']
s.loc['数学' : 'Python']
数学        150
英语        110
Python    130
dtype: int64

2. DataFrame的索引与切片

2.1 DataFrame的索引

(1) 对列进行索引:

通过类似字典的方式;通过属性的方式。

可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name

属性也已经设置好了,就是相应的列名。

df = pd.DataFrame(
    data=np.random.randint(10, 100, size=(4, 6)),
    index=['小明', '小红', '小黄', '小绿'],
    columns=['语文', '数学', '英语', '化学', '物理', '生物']
)
df.语文  # Series类型
df['语文']
# 使用2个中括号得到的类型:DataFrame
df[['语文', "化学"]]
df[['语文']]

dataframe切片,pandas,pandas,python,numpydataframe切片,pandas,pandas,python,numpy

 (2) 对行进行索引:

使用.loc[ ]加index来进行行索引

使用.iloc[ ]加整数来进行行索引

同样返回一个Series,index为原来的columns。

# 不可以直接取行索引
# df['小明']
# df.小明
# DataFrame默认是先取列索引
# 取行索引
print(df.loc['小明'])  # Series类型
df.iloc[0] 
# 使用两个中括号: DataFrame类型
print(type(df.loc[['小明', '小绿']]))
df.loc[['小明']]
print(df.iloc[[0, -1]])
df.iloc[[0, 3]]
df.iloc[[0]]

dataframe切片,pandas,pandas,python,numpy

(3) 对元素索引的方法:

使用列索引;使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数);

使用values属性(二维NumPy数组)。

# 先取列,再取行
print(df['语文']['小明'])
df['语文'][0]
df.语文[0]
df.语文.小明
# 先取行,再取列
df.loc['小明']['语文']
df.loc['小明'][0]
print(df.iloc[0][0])
df.iloc[0]['语文']
df.iloc[0, 0]
df.loc['小明', '语文']
36
36
36

2.2 DataFrame的切片

直接用中括号时:

索引优先对列进行操作;切片优先对行进行操作

# 行切片
print(df[1: 3])   # 左闭右开 
df['小红' : '小黄']  # 左闭右闭
print(df.iloc[1: 3])   # 左闭右开 
df.loc['小红' : '小黄']  # 左闭右闭

dataframe切片,pandas,pandas,python,numpy

# 列切片
#   对列做切片,也必须先对行切片
df.iloc[ : , 1: 4]
df.loc[:, "数学": "化学"]

总结:

取一行或一列 : 索引;取连续的多行或多列 : 切片;取不连续的多行或多列 : 中括号

3. 多层索引操作

(1) 隐式构造

最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组

data = np.random.randint(0, 100, size=(6, 6))

index = [
    ['1班',  '1班',   '1班',  '2班', '2班', '2班'],
    ['张三', '李四', '王五', '鲁班', '张三丰', '张无忌']
]
columns = [
    ['期中', '期中', '期中', '期末', '期末', '期末'],
    ['语文', '数学', '英语', '语文', '数学', '英语']
]

df = pd.DataFrame(data=data, index=index, columns=columns)

dataframe切片,pandas,pandas,python,numpy

Series也可以创建多层索引:

data = np.random.randint(0, 100, size=6)

index = [
    ['1班',  '1班',   '1班',  '2班', '2班', '2班'],
    ['张三', '李四', '王五', '鲁班', '张三丰', '张无忌']
]

s = pd.Series(data=data, index=index)

dataframe切片,pandas,pandas,python,numpy

(2) 显示构造pd.MultiIndex

使用数组:

data = np.random.randint(0, 100, size=(6, 6))

index = pd.MultiIndex.from_arrays( [
    ['1班',  '1班',   '1班',  '2班', '2班', '2班'],
    ['张三', '李四', '王五', '鲁班', '张三丰', '张无忌']
])
columns = [
    ['期中', '期中', '期中', '期末', '期末', '期末'],
    ['语文', '数学', '英语', '语文', '数学', '英语']
]

df = pd.DataFrame(data=data, index=index, columns=columns)
df

dataframe切片,pandas,pandas,python,numpy

 使用tuple:

data = np.random.randint(0, 100, size=(6, 6))

index = pd.MultiIndex.from_tuples( 
    (
        ('1班', '张三'), ('1班', '李四'), ('1班', '王五'), 
        ('2班', '鲁班'), ('2班', '张三丰'), ('2班', '张无忌')
    )
)

columns = [
    ['期中', '期中', '期中', '期末', '期末', '期末'],
    ['语文', '数学', '英语', '语文', '数学', '英语']
]

df = pd.DataFrame(data=data, index=index, columns=columns)
df

使用product:

data = np.random.randint(0, 100, size=(6, 6))

# 笛卡尔积: {a, b} {c, d} => {a, c}, {a, d}, {b, c}, {b, d}

index = pd.MultiIndex.from_product( [
    ['1班',  '2班'],
    ['张三', '李四', '王五']
])
columns = [
    ['期中', '期中', '期中', '期末', '期末', '期末'],
    ['语文', '数学', '英语', '语文', '数学', '英语']
]

df = pd.DataFrame(data=data, index=index, columns=columns)
df

注意:除了行索引index,列索引columns也能用同样的方法创建多层索引

4. 多层索引对象的索引与切片

4.1 Series的操作

对于Series来说,直接中括号[]与使用.loc()完全一样

索引:

# 显式索引
s['1班']
s.loc['1班']
s[['1班']]
s[['1班', '2班']]
s['1班']['张三']
s.loc['1班']['张三']
s.loc['1班', '张三']
s['1班', '张三']
# 隐式索引
s[0]
s[1]
s.iloc[1]
s.iloc[[1, 2]]

dataframe切片,pandas,pandas,python,numpy

切片: 

# 切片
# 显式切片
s['1班' : '2班']
s.loc['1班' : '2班']
s.loc['1班'][:]
# 建议使用隐式索引
s[1 : 5]
s.iloc[1 : 5]
1班  李四     84
    王五     14
2班  鲁班     64
    张三丰    32
dtype: int32

4.2 DataFrame的操作

索引:

# 列索引
df['期中']
df['期中'][['数学']]
df['期中']['数学']
df['期中', '数学']
df.期中.数学

df.iloc[:, 2]
df.iloc[:, [0, 2, 1]]
df.loc[:, ('期中', '数学')]

# 行索引
df.loc['2班']
df.loc['2班'].loc['张三']
df.loc['2班', '张三']
df.loc[('2班', '张三')]

df.iloc[1]
df.iloc[[1]]
df.iloc[[1, 3, 4, 2]]

dataframe切片,pandas,pandas,python,numpydataframe切片,pandas,pandas,python,numpy

获取元素: 

# 获取元素
df['期中']['数学']['1班']['张三']
df['期中']['数学']['1班'][0]

df.iloc[0, 1]
df.loc[('1班', '张三'), ('期中', '数学')]
72

 切片:

# 行切片
df.iloc[1 : 5]
df.loc[('1班', '李四') : ('2班', '李四')]
df.loc['1班' : '2班']

# 列切片
df.iloc[:, 1: 5]
df.loc[:, '期中': '期末']
# df.loc[:, ('期中', '数学') : ('期末', '数学')]  # 报错

# 建议切片使用隐式索引

 5. 索引的堆叠

stack():使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里。

unstack():使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。

# stack: 将列索引变成行索引
df.stack()   # 默认是将最里层的列索引变成行索引
df.stack(level=-1)
df.stack(level=1)

df2 = df.stack(level=0)
df2

 dataframe切片,pandas,pandas,python,numpydataframe切片,pandas,pandas,python,numpy

# unstack: 将行索引变成列索引
df2.unstack()
df2.unstack(level=-1)
df2.unstack(level=2)
df2.unstack(level=1)
df2.unstack(level=0)

dataframe切片,pandas,pandas,python,numpy

 使用fill_value填充:

df.unstack()
df.unstack(fill_value=0)

dataframe切片,pandas,pandas,python,numpy

 文章来源地址https://www.toymoban.com/news/detail-698328.html

 

到了这里,关于pandas---Series与DataFrame索引、切片;多层索引、索引的堆叠的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】数据科学工具(Numpy Pandas np.array() 创建访问数组 向量与矩阵 Series DataFrame)

    1.Numpy numpy是Python中一个非常重要的科学计算库,其最基础的功能就是N维数组对象——ndarray。 1.1 数组的创建 1)np.array() 用 np.array() 函数可以将Python的序列对象(如列表、元组)转换为ndarray数组。 2)arange、linspace、logspace np.arange(start, stop, step) :创建一个一维数组,其中的值

    2024年02月10日
    浏览(48)
  • python中Pandas之DataFrame索引、选取数据

    总结一下 DataFrame 索引问题 先创建一个简单的 DataFrame 。 DataFrame 中有两种索引: 行索引( index ):对应最左边那一竖列 列索引( columns ):对应最上面那一横行 两种索引默认均为从 0 开始的自增整数。 可以使用 index 这个参数指定行索引, columns 这个参数指定列索引。 输出此时

    2023年04月08日
    浏览(51)
  • 【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能

    目录 1 多层索引(MultiIndex) 1.1 创建多层索引 1.1.1 从元组创建多层索引

    2024年02月09日
    浏览(69)
  • pyspark.sql.dataframe.DataFrame 怎么转pandas DataFrame

    pyspark.sql.dataframe.DataFrame 怎么转pandas DataFrame 要将 PySpark 的  pyspark.sql.dataframe.DataFrame  转换为 Pandas DataFrame,可以使用  toPandas()  方法。以下是一个示例: 上面的代码输出 在上述示例中,我们首先使用 PySpark 创建了一个示例 DataFrame  df_spark 。然后,我们使用  toPandas()  方法

    2024年03月20日
    浏览(46)
  • DataFrame.query()--Pandas

    Pandas 中的一个函数,用于在 DataFrame 中执行查询操作。这个方法会返回一个新的 DataFrame,其中包含符合查询条件的数据行。请注意,query 方法只能用于筛选行,而不能用于筛选列。 参数 含义 expr 查询字符串;对于不是有效python变量名的列名:如:UnitPrice(USD),需要将列名

    2024年02月11日
    浏览(39)
  • 【玩转pandas系列】pandas数据结构—DataFrame

    大家好!我是一朵向阳花(花花花)🍭,本期跟大家分享的知识是 pandas 数据结构——DataFrame。 作者的【 Python 数据分析】专栏正在火热更新中🔥,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 ! 每日金句分享: 慢慢来,谁还没有一个努力的过程。』—— pony「网易云

    2024年02月15日
    浏览(36)
  • Pandas DataFrame如何添加一行数据?

    在Pandas DataFrame中,我们经常需要添加新的行数据。这里介绍几种向DataFrame中添加一行数据的方法。 1. 使用.loc索引器 .loc索引器可以在DataFrame的尾部添加一条新行数据,语法如下: 例如: 2. 使用.append()方法 .append()方法可以向DataFrame尾部追加一行数据,语法如下: 例如: 3. 使用insert方

    2024年02月12日
    浏览(42)
  • pandas中DataFrame数据合并、连接

    为解决数据冗余等问题,大量的数据会分开存放在不同的文件(表格)里。在数据处理时,经常会有不同表格的数据需要进行合并操作。可以通过pandas库的 merge函数 和 concat函数 来实现数据集的合并。 根据 一个或多个键 将不同DataFrame中的 行 连接起来。 说明:类似于关系数

    2024年02月15日
    浏览(43)
  • pandas dataframe df.join

    根据dataframe的index索引进行拼接,即df1.index=df2.index时,才会将df2[‘发布时间’]拼到df1左边 如果想指定共同索引,可以用df.merge 此外如果想忽略索引直接1对1拼接,可以先df.reset_index再用df.join

    2024年02月03日
    浏览(40)
  • 【Pandas学习】多条件筛选DataFrame

    目录 一、按列筛选 1、简单筛选 2、多条件筛选  二、按行筛选 三、多条件组合 DataFrameSeries  执行 、 、 == 这些运算符时,会将每一个元素进行比较,得到一个由结果( Boolean 值)组成的相同大小的 DataFrameSeries 返回。 相同大小的 DataFrameSeries 之间可以用 、 | 、 ~ 运算符进

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包