dataframe的创建方式


import pandas as pd
import numpy as np
from tensorflow.python.trackable.trackable_utils import pretty_print_node_path

# 通过series来创建
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([6,7,8,9,10])
df = pd.DataFrame({"第一列":s1,"第二列":s2})
print(df)
print(type(df))
print(type(df["第一列"]))
   第一列  第二列
0    1    6
1    2    7
2    3    8
3    4    9
4    5   10
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

通过字典来创建


df = pd.DataFrame(
    {
        # "id":[1,2,3,4,5],
        "name":["tom","jack","alice","bob","alien"],
        "age":[41,2,15,20,25],
        "score":[60.5,25.1,89.2,56.1,52.0]
    },index=[1,2,3,4,5],columns=["name","score","age"]
)
df
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
# dataframe 的属性
print('行索引:')
print(df.index)
print('列索引:')
print(df.columns)
print('值')
print(df.values)
行索引:
Index([1, 2, 3, 4, 5], dtype='int64')
列索引:
Index(['name', 'score', 'age'], dtype='object')
值
[['tom' 60.5 41]
 ['jack' 25.1 2]
 ['alice' 89.2 15]
 ['bob' 56.1 20]
 ['alien' 52.0 25]]
print('维度:',df.ndim)
print('性状:',df.shape)
print('元素个数:',df.size)
print('数据类型:')
print(df.dtypes)

维度: 2
性状: (5, 3)
元素个数: 15
数据类型:
name      object
score    float64
age        int64
dtype: object
# 行列转置
# print(df.T)
# print(df.T.index)
# print(df.T.columns)

df
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
# 获取元素  loc iloc  at iat
# 获取末行
print(df.loc[4]) # 显示索引 按标签
print(df.iloc[3]) # 隐式索引 按位置 索引从0开始
name      bob
score    56.1
age        20
Name: 4, dtype: object
name      bob
score    56.1
age        20
Name: 4, dtype: object
df
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
# 某列
print(df.loc[:,'name'])   # 前面表示行(: 表示所有), 后面表示列   # 获取name中的所有行
print(df.iloc[:, 0])      # 隐式索引
1      tom
2     jack
3    alice
4      bob
5    alien
Name: name, dtype: object
1      tom
2     jack
3    alice
4      bob
5    alien
Name: name, dtype: object

df
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
# 获取单个数据
print(df.at[3, 'score'])
print(df.iat[2, 1])
print(df.loc[3, 'score'])
print(df.iloc[2, 1])
89.2
89.2
89.2
89.2
# 获取单列数据
print(df['name'])
print(type(df['name']))
1      tom
2     jack
3    alice
4      bob
5    alien
Name: name, dtype: object
<class 'pandas.core.series.Series'>
print(df.name)
print(type(df.name))

print(df[['name']])
print(type(df[['name']]))
df[['name']]
1      tom
2     jack
3    alice
4      bob
5    alien
Name: name, dtype: object
<class 'pandas.core.series.Series'>
    name
1    tom
2   jack
3  alice
4    bob
5  alien
<class 'pandas.core.frame.DataFrame'>
name
1 tom
2 jack
3 alice
4 bob
5 alien
print(df[['name','score']])  # 多列的数据获取 返回的是dataframe
    name  score
1    tom   60.5
2   jack   25.1
3  alice   89.2
4    bob   56.1
5  alien   52.0
# 查看部分数据
print(df.head(2))
print(df.tail(2))
   name  score  age
1   tom   60.5   41
2  jack   25.1    2
    name  score  age
4    bob   56.1   20
5  alien   52.0   25
# 使用布尔索引筛选数据
df[df.score > 70]
df[(df.score > 70) & (df.age < 20)]
df[(df['score'] > 70) & (df.age < 20)]
name score age
3 alice 89.2 15
# 随机抽样
df.sample(3)   # 默认取一条
name score age
1 tom 60.5 41
3 alice 89.2 15
5 alien 52.0 25
df = pd.DataFrame(
    {
        # "id":[1,2,3,4,5],
        "name":["tom","tom","jack","alice","bob","alien"],
        "age":[41,41,2,15,20,25],
        "score":[60.5,60.5,25.1,89.2,56.1,52.0]
    },index=[1,2,3,4,5,6],columns=["name","score","age"]
)
df
name score age
1 tom 60.5 41
2 tom 60.5 41
3 jack 25.1 2
4 alice 89.2 15
5 bob 56.1 20
6 alien 52.0 25
print(df.head()) # 查看前n行数据 , 默认是5行
print(df.tail()) # 查看前n行数据 , 默认是5行

    name  score  age
1    tom   60.5   41
2   jack   25.1    2
3  alice   89.2   15
4    bob   56.1   20
5  alien   52.0   25
    name  score  age
1    tom   60.5   41
2   jack   25.1    2
3  alice   89.2   15
4    bob   56.1   20
5  alien   52.0   25
print(df.isin(['jack',20]))  # 查看元素是否包含在参数集合中
    name  score    age
1  False  False  False
2   True  False  False
3  False  False  False
4  False  False   True
5  False  False  False
print(df.isna())  # 查看元素是否试试缺失值
    name  score    age
1  False  False  False
2  False  False  False
3  False  False  False
4  False  False  False
5  False  False  False
print(df['score'])
print(df['score'].sum())  # 求某一列的总和

1    60.5
2    25.1
3    89.2
4    56.1
5    52.0
Name: score, dtype: float64
282.9
print(df.score.max())
print(df.score.min())
print(df.score.mean())
print(df.score.median())
print(df.score.mode())
print(df.score.std())
print(df.score.var())
89.2
25.1
56.58
56.1
0    25.1
1    52.0
2    56.1
3    60.5
4    89.2
Name: score, dtype: float64
22.867159858626955
522.9069999999999
print(df.score.quantile(0.25))  # 分位数
52.0
print(df.describe())
          score        age
count   5.00000   5.000000
mean   56.58000  20.600000
std    22.86716  14.258331
min    25.10000   2.000000
25%    52.00000  15.000000
50%    56.10000  20.000000
75%    60.50000  25.000000
max    89.20000  41.000000
print(df.count())  # 返回的是每一列非缺失值的个数
name     5
score    5
age      5
dtype: int64
print(df.value_counts())  # 出现的次数
name   score  age
tom    60.5   41     2
alice  89.2   15     1
alien  52.0   25     1
bob    56.1   20     1
jack   25.1   2      1
Name: count, dtype: int64
print(df.drop_duplicates())  # 去重
    name  score  age
1    tom   60.5   41
3   jack   25.1    2
4  alice   89.2   15
5    bob   56.1   20
6  alien   52.0   25
print(df.duplicated())   # 检查重复的
print(df.duplicated(subset=['age']))  # 查看是否重复
1    False
2     True
3    False
4    False
5    False
6    False
dtype: bool
1    False
2     True
3    False
4    False
5    False
6    False
dtype: bool
df.sample()   #随机抽样
name score age
2 tom 60.5 41
print(df.replace(41,20))
    name  score  age
1    tom   60.5   20
2    tom   60.5   20
3   jack   25.1    2
4  alice   89.2   15
5    bob   56.1   20
6  alien   52.0   25
df.cumsum()
df.cumsum(axis=0)
name score age
1 tom 60.5 41
2 tomtom 121.0 82
3 tomtomjack 146.1 84
4 tomtomjackalice 235.3 99
5 tomtomjackalicebob 291.4 119
6 tomtomjackalicebobalien 343.4 144
 print(df.sort_index(ascending=False))
    name  score  age
6  alien   52.0   25
5    bob   56.1   20
4  alice   89.2   15
3   jack   25.1    2
2    tom   60.5   41
1    tom   60.5   41
print(df.sort_values(by='name', ascending=False))
    name  score  age
1    tom   60.5   41
2    tom   60.5   41
3   jack   25.1    2
5    bob   56.1   20
6  alien   52.0   25
4  alice   89.2   15
df = pd.DataFrame(
    {
        # "id":[1,2,3,4,5],
        "name":["tom","tom","jack","alice","bob","alien"],
        "age":[41,41,20,20,20,25],
        "score":[60.5,60.5,25.5,89.2,56.1,25.5]
    },index=[1,2,3,4,5,6],columns=["name","score","age"]
)
df

name score age
1 tom 60.5 41
2 tom 60.5 41
3 jack 25.5 20
4 alice 89.2 20
5 bob 56.1 20
6 alien 25.5 25
# 按值排序  先按score 升序 再按 age 降序
print(df.sort_values(by=['score','age'] ,ascending=[True,False]))
    name  score  age
6  alien   25.5   25
3   jack   25.5   20
5    bob   56.1   20
1    tom   60.5   41
2    tom   60.5   41
4  alice   89.2   20
print(df.nlargest(2, columns=['score', 'age']))
print(df.nsmallest(2, columns=['score', 'age']))
    name  score  age
4  alice   89.2   20
1    tom   60.5   41
    name  score  age
3   jack   25.5   20
6  alien   25.5   25

'''
案例1:学生成绩分析
场景:某班级的学生成绩数据如下,请完成以下任务:
1. 计算每位学生的总分和平均分。
2. 找出数学成绩高于90分或英语成绩高于85分的学生。
3. 按总分从高到低排序,并输出前3名学生。
'''
import pandas as pd
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '数学': [85, 92, 78, 88, 95],
    '英语': [90, 88, 85, 92, 80],
    '物理': [75, 80, 88, 85, 90]
}

scores = pd.DataFrame(data)
scores
姓名 数学 英语 物理
0 张三 85 90 75
1 李四 92 88 80
2 王五 78 85 88
3 赵六 88 92 85
4 钱七 95 80 90
# 1. 计算每位学生的总分和平均分。
scores[['数学','英语','物理']].sum()  # sum()默认竖着求和
数学    438
英语    435
物理    418
dtype: int64
# 1. 计算每位学生的总分和平均分。
scores['总分'] = scores[['数学','英语','物理']].sum(axis=1)

scores['平均分'] = scores[['数学','英语','物理']].mean(axis=1)
scores['平均分'] = scores['总分'] / 3
scores
姓名 数学 英语 物理 总分 平均分
0 张三 85 90 75 250 83.333333
1 李四 92 88 80 260 86.666667
2 王五 78 85 88 251 83.666667
3 赵六 88 92 85 265 88.333333
4 钱七 95 80 90 265 88.333333
# 2. 找出数学成绩高于90分或英语成绩高于85分的学生。
scores[(scores['数学'] > 90) | (scores['英语'] > 85)]
姓名 数学 英语 物理 总分 平均分
0 张三 85 90 75 250 83.333333
1 李四 92 88 80 260 86.666667
3 赵六 88 92 85 265 88.333333
4 钱七 95 80 90 265 88.333333
# 3. 按总分从高到低排序,并输出前3名学生。
scores.sort_values('总分',ascending=False).head(3)
姓名 数学 英语 物理 总分 平均分
4 钱七 95 80 90 265 88.333333
3 赵六 88 92 85 265 88.333333
1 李四 92 88 80 260 86.666667
# 3. 按总分从高到低排序,并输出前3名学生。
scores.nlargest(3,columns=['总分'])
姓名 数学 英语 物理 总分 平均分
3 赵六 88 92 85 265 88.333333
4 钱七 95 80 90 265 88.333333
1 李四 92 88 80 260 86.666667

'''
案例2:销售数据分析
场景:某公司销售数据如下,请完成以下任务:
1. 计算每种产品的总销售额(销售额 = 单价 × 销量)。
2. 找出销售额最高的产品。
3. 按销售额从高到低排序,并输出所有产品信息。
'''
import pandas as pd

data = {
    '产品名称': ['A', 'B', 'C', 'D'],
    '单价': [100, 150, 200, 120],
    '销量': [50, 30, 20, 40]
}
df = pd.DataFrame(data)
df
产品名称 单价 销量
0 A 100 50
1 B 150 30
2 C 200 20
3 D 120 40
# 1. 计算每种产品的总销售额(销售额 = 单价 × 销量)。
df['总销售额'] = df['单价'] * df['销量']
df
产品名称 单价 销量 总销售额
0 A 100 50 5000
1 B 150 30 4500
2 C 200 20 4000
3 D 120 40 4800
# 2. 找出销售额最高的产品。
df.nlargest(1,columns=['总销售额'])
产品名称 单价 销量 总销售额
0 A 100 50 5000
# 3. 按销售额从高到低排序,并输出所有产品信息。
df.sort_values('总销售额',ascending=False)
产品名称 单价 销量 总销售额
0 A 100 50 5000
3 D 120 40 4800
1 B 150 30 4500
2 C 200 20 4000

'''案例3:电商用户行为分析
场景:某电商平台的用户行为数据如下,请完成以下任务:
'''
import pandas as pd

data = {
    '用户ID': [101, 102, 103, 104, 105],
    '用户名': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    '商品类别': ['电子产品', '服饰', '电子产品', '家居', '服饰'],
    '商品单价': [1200, 300, 800, 150, 200],
    '购买数量': [1, 3, 2, 5, 4]
}
df = pd.DataFrame(data)
df
用户ID 用户名 商品类别 商品单价 购买数量
0 101 Alice 电子产品 1200 1
1 102 Bob 服饰 300 3
2 103 Charlie 电子产品 800 2
3 104 David 家居 150 5
4 105 Eve 服饰 200 4
# 1. 计算每位用户的总消费金额(消费金额 = 商品单价 × 购买数量)
df['总消费金额'] = df['商品单价'] * df['购买数量']
df
用户ID 用户名 商品类别 商品单价 购买数量 总消费金额
0 101 Alice 电子产品 1200 1 1200
1 102 Bob 服饰 300 3 900
2 103 Charlie 电子产品 800 2 1600
3 104 David 家居 150 5 750
4 105 Eve 服饰 200 4 800
# 2. 找出消费金额最高的用户,并输出其所有信息
df.nlargest(1,columns='总消费金额')
用户ID 用户名 商品类别 商品单价 购买数量 总消费金额
2 103 Charlie 电子产品 800 2 1600
# 3. 计算所有用户的平均消费金额(保留2位小数)
df['总消费金额'].mean()
np.float64(1050.0)
# 4. 统计电子产品的总购买数量
df[df['商品类别'] == '电子产品']
用户ID 用户名 商品类别 商品单价 购买数量 总消费金额
0 101 Alice 电子产品 1200 1 1200
2 103 Charlie 电子产品 800 2 1600
# 4. 统计电子产品的总购买数量
df[df['商品类别'] == '电子产品']['购买数量']
0    1
2    2
Name: 购买数量, dtype: int64
# 4. 统计电子产品的总购买数量
df[df['商品类别'] == '电子产品']['购买数量'].sum()
np.int64(3)

更多推荐