Series和DataFrame的属性和方法

目录

  • 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']

print(type(se.index))
print(list(se.index)) # 将索引转化为列表输出

['001', '002', '003']
print(type(se.items()))
print(list(se.items())) # 将(索引,值)转化为列表输出

[('001', 'bai'), ('002', 'jia'), ('003', 'hei')]
# 我们可以通过索引值来进行单个数据的访问,同样也支持切片选择多个数据。
# 我们自定的index值被叫做索引下标,没有设置index值时会有一个默认的值叫做位置下标。两者都可用于获取数据。

print(se['001']) # 获取单个数据格式—对象名[]
print(type(se['001']))
bai

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

------------------位置下标-------------------
001    bai
002    jia
dtype: object
# Series是可迭代数据,也可遍历
for value in se: # 遍历数值
    print(value)
    print(type(value))
bai

jia

hei

for key in se.keys(): # 通过keys(),遍历Series的索引
    print(key)
    print(type(key))
001

002

003

for index in se.index.tolist(): # 遍历索引
    print(index)
001
002
003
for item in se.items():
    print(item)
    print(type(item)) # 元组类型
('001', 'bai')

('002', 'jia')

('003', 'hei')

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)

-------------------------------------
('002', name      LiSi
age         20
weight      55
Name: 002, dtype: object)

-------------------------------------
('003', name      WangWu
age           19
weight        60
Name: 003, dtype: object)

-------------------------------------
('004', name      ZhaoLiu
age            22
weight         80
Name: 004, dtype: object)

-------------------------------------
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
 
-------------------------------------
002 name      LiSi
age         20
weight      55
Name: 002, dtype: object
 
-------------------------------------
003 name      WangWu
age           19
weight        60
Name: 003, dtype: object
 
-------------------------------------
004 name      ZhaoLiu
age            22
weight         80
Name: 004, dtype: object
 
-------------------------------------
# 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
-------------------------------------

Series和DataFrame的属性和方法_第1张图片

你可能感兴趣的:(python数据分析,python)