DataFrame

DataFrame是pandas库中的核心数据结构,用于存储二维表格数据。它可以拥有不同类型的列,支持行和列的统计操作。文章介绍了DataFrame的创建,包括从列表、字典等数据结构创建,以及其常用属性如index、columns、dtypes等。此外,还展示了如何进行行、列的选择、切片、修改数据以及groupby和rank等操作。
摘要由CSDN通过智能技术生成

DataFrame

DataFrame定义

DataFrame是一个类似于表格的数据类型,可以理解为一个二维数组,

索引有两个维度,可更改。DataFrame具有以下特点:

  • 列可以是不同的类型

  • 大小可变

  • 标记轴(行和列)

  • 针对行与列进行轴向统计

DataFrame创建

DataFrame统一的创建形式为:

import pandas as pd
pandas.DataFrame(data=None, index=None, columns=None,
dtype=None, copy=False
参数名称说明
data数据ndarray(结构化或同类),Iterable,dict或DataFrame
index行标签,或类似数组
columns列标签,或类似数组
dtype元素数据类型
copy是否可复制
import pandas as pd
# 1.创建一个空的DataFrame
df = pd.DataFrame()
print(df)
# 2.从列表创建DataFrame
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)
# 3.从二维列表创建DataFrame
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=
['Name','Age'],dtype=float)
print(df)
# 4.从列表嵌套字典创建DataFrame
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)
# 5.从字典创建DataFrame
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':
[28,34,29,42]}
df = pd.DataFrame(data, index=['s1','s2','s3','s4'])
print(df)
# 6.从字典创建DataFrame
data = {'one' : pd.Series([1, 2, 3], index=['a', 'b',
'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a',
'b', 'c', 'd'])}
df = pd.DataFrame(data)
print(df)

DataFrame常用属性

属性名称描述
DataFrame.indexDataFrame的索引(行标签)
DataFrame.columnsDataFrame的列标签
DataFrame.dtypes返回DataFrame中元素的dtype
DataFrame.info打印DataFrame的简要摘要
DataFrame.values返回DataFrame的值,返回值为ndarry
DataFrame.shape返回一个表示DataFrame维数(形状)的元组
DataFrame.empty指示DataFrame是否为空
import pandas as pd
# 创建DataFrame
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':
[28,34,29,42]}
df = pd.DataFrame(data, index=['s1','s2','s3','s4'])
print(df)
# 添加score列
df['score']=pd.Series([90, 80, 70, 60], index=
['s1','s2','s3','s4'])
print(df)
# 轴的列表
print(df.axes)
# 数据类型
print(df['Age'].dtype)
# 是否空DataFrame
print(df.empty)
# 轴数
print(df.ndim)
# 元素个数
print(df.size)
12
# 行标签
print(df.index)
# 值
print(df.values)
# df的前三行
print(df.head(3))
# df的后三行
print(df.tail(3))

核心数据结构操作

显示索引,列

import pandas as pd
# 创建DataFrame
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':
[28,34,29,42]}
df = pd.DataFrame(data, index=['s1','s2','s3','s4'])
df.index
df.columns

索引选择

操作语法返回值
选择列df[col]Series
按标签选择行df.loc[label]Series
按整数位置选择行df.iloc[loc]Series
切片行df[5:10]DataFrame
通过布尔向量选择行df[bool_vec]DataFrame
复合索引的访问:
# 访问行
df.loc['classA']
df.loc['classA', 'F']
df.loc[['classA', 'classC']]
# 访问列
df.Age
df.Age['20+']
df['Age']
df['Age', '20+']

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jiuzlgs-1690253158398)(https://s2.loli.net/2023/07/25/jLQUZK1kpXxCc8r.png)]

#	groupby
groupby(["clazz","subject_id"])  	# 将clazz和subject_id分组
#	rank()
rank("dense",ascending=False)		# 将选定的元素排序,dense表示排序模式,ascending=False为降序,True为升序

image.png

df3[df3["rank"]<=3]		#取出小于等于3的元素

image.png

#	将分组显示出来

切片

# 删除index为0的行
df = df.drop(0)
print(df)

# drop方法删除列
df.drop(['three'], axis=1)

# 列添加	insert功能可插入到列中的特定位置
df.insert(1, 'five', df['one'])

loc是针对DataFrame索引名称的切片方法。如果传入的不是索引名称,那么切片操作将无法执行,利用loc方法,能够实现所有单层索引

切片操作。

loc方法使用方法如下:DataFrame.loc[行索引名称或条件, 列索引名

称]

import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b',
'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b',
'c', 'd'])}
df = pd.DataFrame(d)
print(df.loc['b'])
print(df.loc[['a', 'b']])
print(df.loc['a':'c'])
print(df.loc['a':'c','one':'two'])

iloc和loc区别是iloc接收的必须是行索引和列索引的位置

DataFrame.iloc[行索引位置, 列索引位置]

# 绝对位置
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b',
'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b',
'c', 'd'])}
df = pd.DataFrame(d)
print(df.iloc[2])
print(df.iloc[[2, 3]])
print(df.iloc[2:3,0:1])

修改DataFrame中的数据

更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据

import pandas as pd
df = pd.DataFrame([['zs', 12], ['ls', 4]], columns =
['Name','Age'])
df2 = pd.DataFrame([['ww', 16], ['zl', 8]], columns =
['Name','Age'])
df = df.append(df2)
df['Name'][0] = 'Tom'
print(df)
import pandas as pd
df = pd.DataFrame([['zs', 12], ['ls', 4]], columns =
['Name','Age'])
df2 = pd.DataFrame([['ww', 16], ['zl', 8]], columns =
['Name','Age'])
df = df.append(df2)
df['Name'][0] = 'Tom'
print(df)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值