小yo 博客

Back

Python数据分析-dataframe

dataframe的创建

import pandas as pd
import numpy as np
# 通过series创建
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([6,7,8,9,10])
df1 = pd.DataFrame({"第一列":s1,"第二列":s2})
print(df1)
   第一列  第二列
0    1    6
1    2    7
2    3    8
3    4    9
4    5   10
# 通过字典来创建
df2 = pd.DataFrame(
    {
        "id":[1,2,3,4,5],
        "name":["tom","bob","jack","alice","mark"],
        "age":[18,19,20,17,18]
    },
    index = [1,2,3,4,5],columns = ["name","age","id"]
)
print(df2)
    name  age  id
1    tom   18   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   18   5

属性

# 行索引
print(df2.index)
# 列索引
print(df2.columns)
# 值
print(df2.values)
Index([1, 2, 3, 4, 5], dtype='int64')
Index(['name', 'age', 'id'], dtype='object')
[['tom' 18 1]
 ['bob' 19 2]
 ['jack' 20 3]
 ['alice' 17 4]
 ['mark' 18 5]]
# 维度
print(df2.ndim)
# 数据类型
print(df2.dtypes)
# 形状
print(df2.shape)
# 元素个数
print(df2.size)
2
name    object
age      int64
id       int64
dtype: object
(5, 3)
15
# 行列转置
print(df2.T)
        1    2     3      4     5
name  tom  bob  jack  alice  mark
age    18   19    20     17    18
id      1    2     3      4     5
# 获取元素 loc iloc at iat
# 获取某行数据
print(df2)
print(df2.loc[4]) # 显式索引
print(df2.iloc[3]) #隐式索引
    name  age  id
1    tom   18   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   18   5
name    alice
age        17
id          4
Name: 4, dtype: object
name    alice
age        17
id          4
Name: 4, dtype: object
# 获取某列
print(df2.loc[:,"name"])
print(df2.iloc[:,0])
1      tom
2      bob
3     jack
4    alice
5     mark
Name: name, dtype: object
1      tom
2      bob
3     jack
4    alice
5     mark
Name: name, dtype: object
# 单个元素
print(df2.at[3,"age"])
print(df2.iat[2,1])
20
20
# 其他获取单列
print(df2["name"])
print(df2.name)
print(df2[["name","age"]]) # 获取多列
1      tom
2      bob
3     jack
4    alice
5     mark
Name: name, dtype: object
1      tom
2      bob
3     jack
4    alice
5     mark
Name: name, dtype: object
    name  age
1    tom   18
2    bob   19
3   jack   20
4  alice   17
5   mark   18
# 查看部分数据
print(df2.head(2))
print(df2.tail(3))
  name  age  id
1  tom   18   1
2  bob   19   2
    name  age  id
3   jack   20   3
4  alice   17   4
5   mark   18   5
print(df2.age>18)
1    False
2     True
3     True
4    False
5    False
Name: age, dtype: bool
# 使用布尔索引筛选数据
print(df2[df2.age>18])
print(df2[(df2.age>18)&(df2.id<3)])
   name  age  id
2   bob   19   2
3  jack   20   3
  name  age  id
2  bob   19   2
# 随机抽样
df2.sample(3)
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
5 mark 18 5
2 bob 19 2
4 alice 17 4

常用方法

print(df2.head())
print(df2.tail())
    name  age  id
1    tom   18   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   18   5
    name  age  id
1    tom   18   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   18   5
#  是否在集合中
print(df2.isin(["bob",20]))
    name    age     id
1  False  False  False
2   True  False  False
3  False   True  False
4  False  False  False
5  False  False  False
print(df2.isna()) # 是否是缺失值
    name    age     id
1  False  False  False
2  False  False  False
3  False  False  False
4  False  False  False
5  False  False  False
# 统计方法
print(df2.age.sum())
92
print(df2.age.max())
20
print(df2.age.mean())
18.4
print(df2.age.median())
18.0
print(df2.age.mode()) # 众数
0    18
Name: age, dtype: int64
print(df2.age.std())
print(df2.age.var())
1.140175425099138
1.3
print(df2.age.quantile(0.25)) # 分位数
18.0
print(df2.describe()) # 描述信息
             age        id
count   5.000000  5.000000
mean   18.400000  3.000000
std     1.140175  1.581139
min    17.000000  1.000000
25%    18.000000  2.000000
50%    18.000000  3.000000
75%    19.000000  4.000000
max    20.000000  5.000000
print(df2.count()) # 每列非缺失值元素个数
name    5
age     5
id      5
dtype: int64
print(df2.value_counts())
name   age  id
alice  17   4     1
bob    19   2     1
jack   20   3     1
mark   18   5     1
tom    18   1     1
Name: count, dtype: int64
print(df2.drop_duplicates()) # 去重
    name  age  id
1    tom   18   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   18   5
print(df2.duplicated(subset=["age"])) # 检查是否重复
1    False
2    False
3    False
4    False
5     True
dtype: bool
# 随机采样
df2.sample(2)
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
3 jack 20 3
1 tom 18 1
print(df2.replace(18,30)) # 18改为30
    name  age  id
1    tom   30   1
2    bob   19   2
3   jack   20   3
4  alice   17   4
5   mark   30   5
# 累计和
df2.cumsum()
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
1 tom 18 1
2 tombob 37 3
3 tombobjack 57 6
4 tombobjackalice 74 10
5 tombobjackalicemark 92 15
# 累计最小
df2.cummin()
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
1 tom 18 1
2 bob 18 1
3 bob 18 1
4 alice 17 1
5 alice 17 1
# 按索引排序
print(df2.sort_index(ascending=False)) # 降序
    name  age  id
5   mark   18   5
4  alice   17   4
3   jack   20   3
2    bob   19   2
1    tom   18   1
print(df2.sort_values(by=["age","id"],ascending=[True,False]))
    name  age  id
4  alice   17   4
5   mark   18   5
1    tom   18   1
2    bob   19   2
3   jack   20   3
df2.nlargest(2,columns=['age','id'])
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
3 jack 20 3
2 bob 19 2
df2.nsmallest(2,columns=['age','id'])
vertical-align: top; } .dataframe thead th { text-align: right; }
name age id
4 alice 17 4
1 tom 18 1
Python数据分析-dataframe
https://smallyo.top/blog/f6405e58f11af5c2
Author小yo
Published atNovember 30, 2025