四、pandas - DataFrame

suaxi
2025-11-24 / 0 评论 / 9 阅读 / 正在检测是否收录...

1. 创建方法

import numpy as np
import pandas as pd

# 通过Series创建
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
df = pd.DataFrame({"1": s1, "2": s2})
print(df)

   1  2
0  1  4
1  2  5
2  3  6
# 通过字典创建
# 可以通过columns属性指定列的顺序
df = pd.DataFrame(
    {
        "id": [1, 2, 3],
        "name": ["孙笑川", "药水哥", "Giao哥"],
        "age": [33, 30, 33]
    }
)
print(df)

   id   name  age
0   1    孙笑川   33
1   2    药水哥   30
2   3  Giao哥   33


2. 属性

属性说明
index行索引
values
dtypes元素类型
shape形状
ndim维度
size元素个数
columns列标签
loc[]显示索引,按行列标签索引或切片
iloc[]隐式索引,按行列位置索引或切片
at[]使用行列标签访问指定元素
iat[]使用行列位置访问指定元素
T行列转置
print("行索引:", df.index)
print("列标签", df.columns)
print("值:", df.values)

行索引: RangeIndex(start=0, stop=3, step=1)
列标签 Index(['id', 'name', 'age'], dtype='object')
值: [[1 '孙笑川' 33]
 [2 '药水哥' 30]
 [3 'Giao哥' 33]]
print("形状:", df.shape)
print("维度:", df.ndim)
print("数据类型:")
print(df.dtypes)

形状: (3, 3)
维度: 2
数据类型:
id       int64
name    object
age      int64
dtype: object
# 行数据
# loc
print(df.loc[1])
print("==================")

# iloc
print(df.iloc[1])

id        2
name    药水哥
age      30
Name: 1, dtype: object
==================
id        2
name    药水哥
age      30
Name: 1, dtype: object
# 列数据
print(df.loc[:, 'name'])
print("==================")
print(df.iloc[:, 1])

0      孙笑川
1      药水哥
2    Giao哥
Name: name, dtype: object
==================
0      孙笑川
1      药水哥
2    Giao哥
Name: name, dtype: object
# 获取指定元素
print(df.at[0, 'name'])
print("==================")
print(df.iat[0, 1])
print("==================")
print(df.loc[0, 'name'])
print("==================")
print(df.iloc[0, 1])

孙笑川
==================
孙笑川
==================
孙笑川
==================
孙笑川
# 行列转置
#print(df.T)
# 获取单列数据
print(df['name'])
print("==================")
print(df.name)
print("==================")
column = df[['name']]
print(column)
print(type(column))

0      孙笑川
1      药水哥
2    Giao哥
Name: name, dtype: object
==================
0      孙笑川
1      药水哥
2    Giao哥
Name: name, dtype: object
==================
    name
0    孙笑川
1    药水哥
2  Giao哥
<class 'pandas.core.frame.DataFrame'>
# 多列数据
print(df[['name', 'age']])

    name  age
0    孙笑川   33
1    药水哥   30
2  Giao哥   33
# 获取部分数据
print(df.head(2))
print("==================")
print(df.tail(2))

   id name  age
0   1  孙笑川   33
1   2  药水哥   30
==================
   id   name  age
1   2    药水哥   30
2   3  Giao哥   33
# 布尔索引
print(df[df.age > 32])
print("==================")
print(df[(df.age > 32) & (df.id == 1)])

   id   name  age
0   1    孙笑川   33
2   3  Giao哥   33
==================
   id name  age
0   1  孙笑川   33
# 随机抽样
print(df.sample(2))

   id   name  age
0   1    孙笑川   33
2   3  Giao哥   33


3. 常用方法

方法说明
head()获取前n行数据,默认值5
tail()获取后n行数据,默认值5
isin()判断元素是否包含在参数集合中
isna()判断每一个元素是否为缺失值(NaN/None)
sum()求和,自动忽略缺失值
mean()平均值
min()最小值
max()最大值
var()方差
std()标准差
median()中位数
mode()众数(可以有多个返回值)
quantile(q)分位数,q取值范围为:0~1
describe()常见统计信息(count、mean、std、min、25%、50%、75%、max)
value_counts()每个唯一值的出现次数
count()非缺失值数量
duplicated()是否重复
drop_duplicates()去除重复项
sample()随机抽样
replace()替换
sort_index()按索引排序
sort_values()按值排序
nlargest()返回某列最大的n条数据
nsmallest()返回某列最小的n条数据
df = pd.DataFrame(
    {
        "id": [1, 2, 3],
        "name": ["孙笑川", "药水哥", "Giao哥"],
        "age": [33, 30, 31],
        "address": ["成都", "武汉", "河南"]
    }
)
print(df)

   id   name  age address
0   1    孙笑川   33      成都
1   2    药水哥   30      武汉
2   3  Giao哥   31      河南
print(df.head(1))
print("============================")
print(df.tail(1))

   id name  age address
0   1  孙笑川   33      成都
============================
   id   name  age address
2   3  Giao哥   31      河南
# 查看元素是否包含在参数集合中
print(df.isin(["药水哥", 31]))

      id   name    age  address
0  False  False  False    False
1  False   True  False    False
2  False  False   True    False
# 查看元素是否是缺失值
print(df.isna())

      id   name    age  address
0  False  False  False    False
1  False  False  False    False
2  False  False  False    False
# 求和
print(df.sum())
print("============================")
print(df.age.sum())

id                   6
name       孙笑川药水哥Giao哥
age                 94
address         成都武汉河南
dtype: object
============================
94
# 最值
print(df.age.max())
print(df.name.min())

33
Giao哥
# 平均数
print(df.age.mean())

# 中位数
print(df.age.median())

# 众数
print(df.age.mode())

31.333333333333332
31.0
0    30
1    31
2    33
Name: age, dtype: int64
# 标准差
print(df.age.std())

# 方差
print(df.age.var())

# 分位数
print(df.age.quantile(0.25))

1.5275252316519468
2.3333333333333335
30.5
# 描述信息
print(df.describe())

        id        age
count  3.0   3.000000
mean   2.0  31.333333
std    1.0   1.527525
min    1.0  30.000000
25%    1.5  30.500000
50%    2.0  31.000000
75%    2.5  32.000000
max    3.0  33.000000
# 每一列中非缺失值的个数
print(df.count())

id         3
name       3
age        3
address    3
dtype: int64
# 每一个唯一值的出现次数
print(df.value_counts())

id  name   age  address
1   孙笑川    33   成都         1
2   药水哥    30   武汉         1
3   Giao哥  31   河南         1
Name: count, dtype: int64
# 去重
print(df.drop_duplicates())

   id   name  age address
0   1    孙笑川   33      成都
1   2    药水哥   30      武汉
2   3  Giao哥   31      河南
# 判重
print(df.duplicated())
print("============================")
# 指定列判重
print(df.duplicated(subset="name"))

0    False
1    False
2    False
dtype: bool
============================
0    False
1    False
2    False
dtype: bool
# 随机抽样
print(df.sample())

   id   name  age address
2   3  Giao哥   31      河南
# replace
print(df.replace(30, 35))

   id   name  age address
0   1    孙笑川   33      成都
1   2    药水哥   35      武汉
2   3  Giao哥   31      河南
# 累计和
print(df.cumsum())
print("============================")

# 参数 axis 0:按列累计,1按行累计
# 注:累计时需确保元素类型一直
print(df.cummax(axis=0))

   id         name  age address
0   1          孙笑川   33      成都
1   3       孙笑川药水哥   63    成都武汉
2   6  孙笑川药水哥Giao哥   94  成都武汉河南
============================
   id name  age address
0   1  孙笑川   33      成都
1   2  药水哥   33      武汉
2   3  药水哥   33      河南
# 排序
print(df.sort_index())
print("============================")

# 按值排序时需指定按哪一列排
print(df.sort_values(by='name'))
print("============================")

# 多列排序,并指定排序方式 False:倒序 True:升序
print(df.sort_values(by=['name', 'age'], ascending=[False, False]))

   id   name  age address
0   1    孙笑川   33      成都
1   2    药水哥   30      武汉
2   3  Giao哥   31      河南
============================
   id   name  age address
2   3  Giao哥   31      河南
0   1    孙笑川   33      成都
1   2    药水哥   30      武汉
============================
   id   name  age address
1   2    药水哥   30      武汉
0   1    孙笑川   33      成都
2   3  Giao哥   31      河南
print(df.nlargest(2, columns=['age']))
print("============================")
print(df.nsmallest(2, columns=['age']))

   id   name  age address
0   1    孙笑川   33      成都
2   3  Giao哥   31      河南
============================
   id   name  age address
1   2    药水哥   30      武汉
2   3  Giao哥   31      河南
0

评论 (0)

取消