Series和DataFrame的属性和方法

Series常用属性和方法

表格数据中的每一列或者每一行的数据结构都是Series,它可以看成是一维的表格数据。它可以属于DataFrame的一部分也可以作为一个独立的数据结构存在。
其具有以下属性和方法:

series.values —> 数据的值

series.index —> 数据的索引

series.items() —> 每对索引和值

values、index、items返回的对象分别是List、Index、Zip类型的数据,为了方便使用和观察数据,可以使用series.index.tolist()list(series.items())方法转化成List类型。

from pandas import Series
name = ['bai','jia','hei']
index = ['001','002','003']
se = Series(data=name,index=index)
print(se)
print(se.values) # 输出Series的值,以列表形式展示
print(type(se.values))
001    bai
002    jia
003    hei
dtype: object
['bai' 'jia' 'hei']
<class 'numpy.ndarray'>
print(type(se.index))
print(list(se.index)) # 将索引转化为列表输出
<class 'pandas.core.indexes.base.Index'>
['001', '002', '003']
print(type(se.items()))
print(list(se.items())) # 将(索引,值)转化为列表输出
<class 'zip'>
[('001', 'bai'), ('002', 'jia'), ('003', 'hei')]
# 我们可以通过索引值来进行单个数据的访问,同样也支持切片选择多个数据。
# 我们自定的index值被叫做索引下标,没有设置index值时会有一个默认的值叫做位置下标。两者都可用于获取数据。

print(se['001']) # 获取单个数据格式—对象名[]
print(type(se['001']))
bai
<class 'str'>
print(se[['001','003']]) # 获取多个不连续数据时是双层中括号— 对象名[[]]
001    bai
003    hei
dtype: object
print('------------------索引下标-------------------')
print(se['001':'003']) # 获取多个连续数据时是双层括号— 对象名[index_a:index_b],如果是索引下标,首尾数据都会取到。
print(type(se['001':'003'])) # 获取的数据是Series数据。
print('------------------位置下标-------------------')
print(se[0:2]) # 如果是位置下标,取首不取尾
------------------索引下标-------------------
001    bai
002    jia
003    hei
dtype: object
<class 'pandas.core.series.Series'>
------------------位置下标-------------------
001    bai
002    jia
dtype: object
# Series是可迭代数据,也可遍历
for value in se: # 遍历数值
    print(value)
    print(type(value))
bai
<class 'str'>
jia
<class 'str'>
hei
<class 'str'>
for key in se.keys(): # 通过keys(),遍历Series的索引
    print(key)
    print(type(key))
001
<class 'str'>
002
<class 'str'>
003
<class 'str'>
for index in se.index.tolist(): # 遍历索引
    print(index)
001
002
003
for item in se.items():
    print(item)
    print(type(item)) # 元组类型
('001', 'bai')
<class 'tuple'>
('002', 'jia')
<class 'tuple'>
('003', 'hei')
<class 'tuple'>

series.str会将数据转化为字符串类型,contains()判断字符串是否含有指定子串,返回的是bool类型

series.str.contains('人')
# 可以判断此series中是否含有“人”这个字

DataFrame数据的选择、遍历、修改

常用属性与方法

import pandas as pd
df_dict = {
	'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
	'age':['18','20','19','22'],
	'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)

# 用shape属性获取行数和列数
print(df.shape)

# 获取行索引
print(df.index.tolist())

# 获取列索引
print(df.columns.tolist())

# 用ndim属性获取数据的维度
print(df.ndim)
         name age weight
001  ZhangSan  18     50
002      LiSi  20     55
003    WangWu  19     60
004   ZhaoLiu  22     80
(4, 3)
['001', '002', '003', '004']
['name', 'age', 'weight']
2
# 需要注意的是,如果数据量比较大并且我们想看数据的具体情况的时候,这些属性就不够用了。
# 如果直接打印df有比较耗时,所以我们可以只获取前几行或者后几行,了解数据的构成即可。可以使用head()、tail()方法。
# 两个方法都有默认值,默认值是5,可以自己设置,若不设置且数据不够5个会将全部数据拿出来。

print('------------------- # 打印前两行------------------------')
print(df.head(2))

print('------------------- # 打印后两行------------------------')
print(df.tail(2))
------------------- # 打印前两行------------------------
         name age weight
001  ZhangSan  18     50
002      LiSi  20     55
------------------- # 打印后两行------------------------
        name age weight
003   WangWu  19     60
004  ZhaoLiu  22     80

获取行列数据

# 通过位置索引切片获取一行
print(df[0:1]) # 通过这种位置索引方式获取一行数据,必须以切片方式
print('------------------------------')

# 通过位置索引切片获取多行
print(df[1:3])
print('------------------------------')

# 获取多行里面的某几列
print(df[1:3][['name','age']])
print('------------------------------')

# 获取DataFrame的列
print(df['name'])
print('------------------------------')

# 如果获取多个列
print(df[['name','age']])
print('------------------------------')
         name age weight
001  ZhangSan  18     50
------------------------------
       name age weight
002    LiSi  20     55
003  WangWu  19     60
------------------------------
       name age
002    LiSi  20
003  WangWu  19
------------------------------
001    ZhangSan
002        LiSi
003      WangWu
004     ZhaoLiu
Name: name, dtype: object
------------------------------
         name age
001  ZhangSan  18
002      LiSi  20
003    WangWu  19
004   ZhaoLiu  22
------------------------------

df[]不支持直接输入标签索引获取行数据,例如:df['001']

这种方式可以获取一列数据,列如:df['列索引']

如果想获取多行里面的某几列可写成:df[行位置索引切片][列索引],例如:df[1:3][['name','age']],将列索引值放到同一个列表中,再将列表放到第二个方括号中

# 还可通过行标签索引筛选loc[]
# df.loc[] 通过标签索引获取行数据,它的语法结构是这样的:df.loc[[行],[列]],
# 方括号中用逗号分隔,左侧是行、右侧是列。
# 注意:如果行或者列使用切片的时候,要把方括号去掉,列df.loc['001':'003','name':'weight'] / df.loc['001','name':'weight']。
# 如果是不连续的数据,需要加方括号。

# 获取某一行某一列的数据
print(df.loc['001','name'])
print('------------------------------')

# 某一行多列的数据
print(df.loc['001',['name','weight']])
print('------------------------------')

# 一行所有列
print(df.loc['001',:])
print('------------------------------')

# 选择间隔的多行多列
print(df.loc[['001','003'],['name','weight']])
print('------------------------------')

# 选择连续的多行和间隔的多列
print(df.loc['001':'003','name':'weight'])
print('------------------------------')
ZhangSan
------------------------------
name      ZhangSan
weight          50
Name: 001, dtype: object
------------------------------
name      ZhangSan
age             18
weight          50
Name: 001, dtype: object
------------------------------
         name weight
001  ZhangSan     50
003    WangWu     60
------------------------------
         name age weight
001  ZhangSan  18     50
002      LiSi  20     55
003    WangWu  19     60
------------------------------
print(df.loc['001','name':'weight'])
name      ZhangSan
age             18
weight          50
Name: 001, dtype: object
# 通过行位置索引筛选iloc[]

print(df)
print('------------------------------')

# 取一行
print(df.iloc[1])
print('------------------------------')

# 取连续多行
print(df.iloc[0:2])
print('------------------------------')

# 取间断的多行
print(df.iloc[[0,2],:])
print('------------------------------')

# 取某一列
print(df.iloc[:,1])
print('------------------------------')

# 某一个值
print(df.iloc[1,0])
         name age weight
001  ZhangSan  18     50
002      LiSi  20     55
003    WangWu  19     60
004   ZhaoLiu  22     80
------------------------------
name      LiSi
age         20
weight      55
Name: 002, dtype: object
------------------------------
         name age weight
001  ZhangSan  18     50
002      LiSi  20     55
------------------------------
         name age weight
001  ZhangSan  18     50
003    WangWu  19     60
------------------------------
001    18
002    20
003    19
004    22
Name: age, dtype: object
------------------------------
LiSi

遍历

# iterrows(): 按行遍历,将DataFrame的每一行转化为(index, Series)对。index为行索引值,Series为该行对应的数据。
for item in df.iterrows():
    print(item) # 元组
    print(type(item))
    print('-------------------------------------')
('001', name      ZhangSan
age             18
weight          50
Name: 001, dtype: object)
<class 'tuple'>
-------------------------------------
('002', name      LiSi
age         20
weight      55
Name: 002, dtype: object)
<class 'tuple'>
-------------------------------------
('003', name      WangWu
age           19
weight        60
Name: 003, dtype: object)
<class 'tuple'>
-------------------------------------
('004', name      ZhaoLiu
age            22
weight         80
Name: 004, dtype: object)
<class 'tuple'>
-------------------------------------
for index,row_data in df.iterrows():
    print(index,row_data)
    print(type(index),type(row_data))
    print('-------------------------------------')
001 name      ZhangSan
age             18
weight          50
Name: 001, dtype: object
<class 'str'> <class 'pandas.core.series.Series'>
-------------------------------------
002 name      LiSi
age         20
weight      55
Name: 002, dtype: object
<class 'str'> <class 'pandas.core.series.Series'>
-------------------------------------
003 name      WangWu
age           19
weight        60
Name: 003, dtype: object
<class 'str'> <class 'pandas.core.series.Series'>
-------------------------------------
004 name      ZhaoLiu
age            22
weight         80
Name: 004, dtype: object
<class 'str'> <class 'pandas.core.series.Series'>
-------------------------------------
# iteritems():按列遍历,将DataFrame的每一列转化为(column, Series)对。column为列索引的值,Series为该列对应的数据。
for column, column_data in df.iteritems():
    print(column, column_data)
    print('-------------------------------------')
name 001    ZhangSan
002        LiSi
003      WangWu
004     ZhaoLiu
Name: name, dtype: object
-------------------------------------
age 001    18
002    20
003    19
004    22
Name: age, dtype: object
-------------------------------------
weight 001    50
002    55
003    60
004    80
Name: weight, dtype: object
-------------------------------------

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值