初识pandas(2)Series 常用属性和方法DataFrame数据的获取和遍历

Series 常用属性和方法

  • 表格数据中的每一行或者每一列的数据结构都是Series, 它可以看成一维的表格数据, 它可以属于DataFrame的一部分也可以作为独立的数据结构存在
    • 获取数据的值, 使用 values方法
    • 获取索引的值, 使用 index 方法
    • 获取每对索引的值, 使用 items 方法

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

from pandas import Series
emp = ['01', '02', '03', '04', '05', '06']
name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞']
# 构建数据
series = Series(data=name, index=emp)

# 获取数据的值, 使用 values方法
print("数据的值: ",series.values)
# 获取索引的值, 使用 index 方法
print("索引的值原始值: ", series.index)
print("索引的值转换后: ", list(series.index))
# 获取每对索引的值, 使用 items 方法
print("每对索引和值原始值: ", series.items)
print("每对索引和值转换后: ", list(series.items()))
数据的值:  ['小乔' '孙策' '刘备' '赵云' '哪吒' '张飞']
索引的值原始值:  Index(['01', '02', '03', '04', '05', '06'], dtype='object')
索引的值转换后:  ['01', '02', '03', '04', '05', '06']
每对索引和值原始值:  <bound method Series.iteritems of 01    小乔
02    孙策
03    刘备
04    赵云
05    哪吒
06    张飞
dtype: object>
每对索引和值转换后:  [('01', '小乔'), ('02', '孙策'), ('03', '刘备'), ('04', '赵云'), ('05', '哪吒'), ('06', '张飞')]
  • Series 就像将索引值暴露在外面的list, 在获取数据的时候可以通过索引值来进行单个数据的访问, 也支持切片选择多个数据
    • 获取数据格式— 对象名[]
    • 获取多个不连续数据时是双层括号— 对象名[[]]
    • 使用切片时使用的是: 对象名['下标':'下标']
from pandas import Series
emp = ['01', '02', '03', '04', '05', '06']
name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞']
# 构建数据
series = Series(data=name, index=emp)

# 使用索引值获取单个数据
print('单个数据: ', series['01'])

# 使用索引值获取多个不连续的数据
print('索引下标: ',series[['02','04']])

# 使用切片获取连续的数据, 这个01:02, 是使用索引为下标
# 如果下标为['a','b','c','d','e','f'],那么此时的切片操作应为series['a':'d']
print('索引切片: ',series['01':'04'])
单个数据:  小乔
索引下标:  02    孙策
04    赵云
dtype: object
索引切片:  01    小乔
02    孙策
03    刘备
04    赵云
dtype: object
  • 这样使用也可以,自定义的index值被叫做索引下标,没有设置index值时会有一个默认的值叫做位置下标,这时和操作列表是一样的
from pandas import Series
emp = ['01', '02', '03', '04', '05', '06']
name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞']
# 构建数据
series = Series(data=name, index=emp)


# 获取单个数据
print(series[0])
# 获取多个不连续的数据
print('位置下标',series[[1,3]])
# 使用切片获取连续的数据
print('位置切片',series[0:3])

小乔
位置下标 02    孙策
04    赵云
dtype: object
位置切片 01    小乔
02    孙策
03    刘备
dtype: object

通过遍历也可以获取数据

  • 利用循环来遍历Series。我们可以直接遍历Series的值
# 遍历并拿到data数据
for value in series:
    print(value)
  • 通过keys(),遍历Series的索引
# 遍历并拿到index数据
for value in series.keys():
    print(value)
  • 通过items(),遍历Series的每对索引和数据
# 遍历并拿到每对索引和数据
for value in series.items():
    print(value)

代码示例

from pandas import Series
emp = ['01', '02', '03', '04', '05', '06']
name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞']
# 构建数据
series = Series(data=name, index=emp)

# 遍历并拿到每对索引和数据
for value in series.items():
    print(value)
('01', '小乔')
('02', '孙策')
('03', '刘备')
('04', '赵云')
('05', '哪吒')
('06', '张飞')

DataFrame数据的获取和遍历

数据的维度是一维还是二维的我们可以使用ndim查看,数据的行数和列数shape,以及行列的索引值index、columns

import pandas as pd

df_dict = {
    
    
	'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'],
	'age':['19','20','19','22', '21','23'],
	'weight':['50','55','60','80', '60','80']
}
df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06'])

print(df)
# 获取行数和列数
print("行数和列数: ",df.shape)

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

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

# 获取数据的维度
print("维度: ", df.ndim)

print('*'*50)
'''如果数据量太大直接打印df会比较耗时, 所以可以使用head()获取前几行、使用tail()获取后几行, 这两个方法都有默认值, 默认值为5'''
# 获取前两条
# df.head(2)

# 获取后两条
df.tail(2)
   name age weight
01   小乔  19     50
02   孙策  20     55
03   刘备  19     60
04   赵云  22     80
05   哪吒  21     60
06   张飞  23     80
行数和列数:  (6, 3)
行索引:  ['01', '02', '03', '04', '05', '06']
列索引:  ['name', 'age', 'weight']
维度:  2
**************************************************
name age weight
05 哪吒 21 60
06 张飞 23 80

获取行数据

import pandas as pd

df_dict = {
    
    
	'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'],
	'age':['19','20','19','22', '21','23'],
	'weight':['50','55','60','80', '60','80']
}
df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06'])

# 通过位置索引切片获取一行
print(df[0:1])
print('*'*50)
# 通过位置索引切片获取多行
print(df[1:3])
print('*'*50)
# 获取多行里面的某几列
print(df[1:3][['name','age']])
print('*'*50)
# 获取DataFrame的列
print(df['name'])
print('*'*50)
# 如果获取多个列
print(df[['name','age']])

"""
df[]不支持直接输入标签索引获取行数据,例如:df['001']
这种方式可以获取一列数据,列如:df['name']
如果想获取多行里面的某几列可写成:df[行][列],例如:df[1:3][['name','age']],将列索引值放到同一个列表中,再将列表放到第二个方括号中
"""

   name age weight
01   小乔  19     50
**************************************************
   name age weight
02   孙策  20     55
03   刘备  19     60
**************************************************
   name age
02   孙策  20
03   刘备  19
**************************************************
01    小乔
02    孙策
03    刘备
04    赵云
05    哪吒
06    张飞
Name: name, dtype: object
**************************************************
   name age
01   小乔  19
02   孙策  20
03   刘备  19
04   赵云  22
05   哪吒  21
06   张飞  23

loc()

通过行标签索引筛选loc[],通过行位置索引筛选iloc[]
df.loc[] 通过标签索引获取行数据,它的语法结构是这样的:df.loc[[行],[列]],方括号中用逗号分隔,左侧是行、右侧是列。千万注意:如果行或者列使用切片的时候,要把方括号去掉,列df.loc[‘001’:‘003’,‘name’:‘weight’]

import pandas as pd

df_dict = {
    
    
	'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'],
	'age':['19','20','19','22', '21','23'],
	'weight':['50','55','60','80', '60','80']
}
df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06'])

# 获取某一行某一列的数据
print(df.loc['01','name'])
# 某一行多列的数据
print(df.loc['01',['name','weight']])
# 一行所有列
print(df.loc['01',:])
# 选择间隔的多行多列
print(df.loc[['01','03'],['name','weight']])
# 选择连续的多行和间隔的多列
print(df.loc['01':'03','name':'weight'])
小乔
name      小乔
weight    50
Name: 01, dtype: object
name      小乔
age       19
weight    50
Name: 01, dtype: object
   name weight
01   小乔     50
03   刘备     60
   name age weight
01   小乔  19     50
02   孙策  20     55
03   刘备  19     60

iloc()

df.iloc[] 通过位置索引获取行数据,他的操作和loc[]操作是一样的,只要将标签索引改成位置索引就好了

# 取一行
print(df.iloc[1])
# 取连续多行
print(df.iloc[0:2])
# 取间断的多行
print(df.iloc[[0,2],:])
# 取某一列
print(df.iloc[:,1])
# 某一个值
print(df.iloc[1,0])

loc和iloc的切片操作在是否包含切片终点的数据有差异。loc[‘01’:‘03’]的结果中包含行索引003对应的行。iloc[0:2] 结果中不包含序号为2的数据,切片终点对应的数据不在筛选结果中

iterrows() 按行遍历

遍历,将DataFrame的每一行转化为(index, Series)对。index为行索引值,Series为该行对应的数据

for index,row_data in df.iterrows():
   print(index,row_data)

iteritems() 按列遍历

遍历,将DataFrame的每一列转化为(column, Series)对。column为列索引的值,Series为该列对应的数据

for col,col_data in df.iteritems():
    print(col)

猜你喜欢

转载自blog.csdn.net/lxb_wyf/article/details/109409851
今日推荐