一、数据提取

1.1.按索引提取单行的数值

语法:

# 根据索引取值
df_inner.loc[3]

案例:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'age': [25, 30, 20, 35],
    'name': ['小明', '小红', '小刚', '小美'],
    'city': ['北京', '上海', '广州', '北京'],
    'price': [2500, 4000, 1500, 3000],
    'category': ['A-10', 'B-20', 'A-15', 'C-25'],
    'date': pd.date_range(start='1/1/2013', periods=4)
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
2   20   小刚   广州   1500     A-15 2013-01-03
3   35   小美   北京   3000     C-25 2013-01-04
"""

# 1. 按索引提取单行的数值
row_3 = df_inner.loc[3] # 索引为3
print("\n按索引提取第3行的数值:")
print(row_3)
"""
按索引提取第3行的数值:
age                          35
name                         小美
city                         北京
price                      3000
category                   C-25
date        2013-01-04 00:00:00
Name: 3, dtype: object
"""

1.2.按索引提取区域行数值

语法:

df_inner.iloc[0:3]

案例:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'age': [25, 30, 20, 35],
    'name': ['小明', '小红', '小刚', '小美'],
    'city': ['北京', '上海', '广州', '北京'],
    'price': [2500, 4000, 1500, 3000],
    'category': ['A-10', 'B-20', 'A-15', 'C-25'],
    'date': pd.date_range(start='1/1/2013', periods=4)
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
2   20   小刚   广州   1500     A-15 2013-01-03
3   35   小美   北京   3000     C-25 2013-01-04
"""

# 按索引提取区域行数值
rows_0_2 = df_inner.iloc[0:3]
print("\n按索引提取第0到2行的数值:")
print(rows_0_2)
"""
按索引提取第0到2行的数值:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
2   20   小刚   广州   1500     A-15 2013-01-03
"""

1.3.重设索引

语法:

df_inner.reset_index()

案例:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'age': [25, 30, 20, 35],
    'name': ['小明', '小红', '小刚', '小美'],
    'city': ['北京', '上海', '广州', '北京'],
    'price': [2500, 4000, 1500, 3000],
    'category': ['A-10', 'B-20', 'A-15', 'C-25'],
    'date': pd.date_range(start='1/1/2013', periods=4)
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
2   20   小刚   广州   1500     A-15 2013-01-03
3   35   小美   北京   3000     C-25 2013-01-04
"""

# 重设索引
df_reset = df_inner.reset_index()
print("\n重设索引后的DataFrame:")
print(df_reset)

输出如下:

pandas数据分析(二)_参数说明

1.4.设置日期为索引

语法:将date列设置为索引

df_inner=df_inner.set_index('date')

案例:

# 设置日期为索引
df_inner.set_index('date', inplace=True)
print("\n设置日期为索引后的DataFrame:")
print(df_inner)
"""
设置日期为索引后的DataFrame:
            age name city  price category
date                                     
2013-01-01   25   小明   北京   2500     A-10
2013-01-02   30   小红   上海   4000     B-20
2013-01-03   20   小刚   广州   1500     A-15
2013-01-04   35   小美   北京   3000     C-25
"""

1.5.提取3日之前的所有数据(包含3日)

语法:

df_inner[:'2013-01-03']

案例:需要先将date列设置为索引,然后在根据日期索引取值

import pandas as pd
import numpy as np

# 示例数据
data = {
    'age': [25, 30, 20, 35],
    'name': ['小明', '小红', '小刚', '小美'],
    'city': ['北京', '上海', '广州', '北京'],
    'price': [2500, 4000, 1500, 3000],
    'category': ['A-10', 'B-20', 'A-15', 'C-25'],
    'date': pd.date_range(start='1/1/2013', periods=4)
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
2   20   小刚   广州   1500     A-15 2013-01-03
3   35   小美   北京   3000     C-25 2013-01-04
"""

# 设置日期为索引
df_inner.set_index('date', inplace=True)
print("\n设置日期为索引后的DataFrame:")
print(df_inner)
"""
设置日期为索引后的DataFrame:
            age name city  price category
date                                     
2013-01-01   25   小明   北京   2500     A-10
2013-01-02   30   小红   上海   4000     B-20
2013-01-03   20   小刚   广州   1500     A-15
2013-01-04   35   小美   北京   3000     C-25
"""

# 提取3日之前的所有数据
df_before_20130104 = df_inner[:'2013-01-03']
print("\n提取2013-01-03之前的所有数据(包含3日数据):")
print(df_before_20130104)
"""
提取2013-01-04之前的所有数据:
            age name city  price category
date                                     
2013-01-01   25   小明   北京   2500     A-10
2013-01-02   30   小红   上海   4000     B-20
2013-01-03   20   小刚   广州   1500     A-15
"""

1.6.使用iloc按位置区域提取数据

语法:

df_inner.iloc[:3,:2] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。

案例:

# 使用 iloc 按位置区域提取数据
data_pos = df_inner.iloc[:3, :2]  # 获取前3行2列的这个范围内的数据,df_inner.iloc[3, 2]指的是获取3行2列位置的数据
print("\n使用 iloc 按位置区域提取前三行前两列的数据:")
print(data_pos)
"""
使用 iloc 按位置区域提取前三行前两列的数据:
   age name
0   25   小明
1   30   小红
2   20   小刚
"""

1.7.适应iloc按位置单独提起数据

语法:

df_inner.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列

案例:

# 使用 iloc 按位置单独提取数据
data_specific_pos = df_inner.iloc[[0, 2, 3], [1, 2]]
print("\n使用 iloc 提取第0、2、3行,第1、2列的数据:")
print(data_specific_pos)

df_inner.iloc[[0, 2, 3], [4, 5]] 返回指定行和列位置的数据,例如第0、2、3行和第1、2列的数据。

pandas数据分析(二)_数据_02

1.8.判断city列的值是否为北京

语法:

# 方式一:isin
df_inner['city'].isin(['beijing'])
# 方式二:==
df_inner['city'] == '北京'

案例:

# 判断 city 列的值是否为北京
# is_bool = df_inner['city'] == '北京'
is_bool = df_inner['city'].isin(['北京'])
print("\n判断 city 列的值是否为北京:")
print(is_bool)
"""
判断 city 列的值是否为北京:
0     True
1    False
2    False
3     True
Name: city, dtype: bool
"""

1.9.判断city列里是否包含beijing和shanghai,然后将符合条件的数据提取出来

语法:

df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])]

案例:df_inner.loc[df_inner['city'].isin(['北京', '上海'])] 返回 city 列中包含北京或上海的所有行。

# 判断 city 列里是否包含北京和上海,然后将符合条件的数据提取出来
# df_inner['city'].isin(['北京', '上海'])返回的city列符合要求的返回true,不符合的返回false
df_beijing_shanghai = df_inner.loc[df_inner['city'].isin(['北京', '上海'])]
print("\n判断 city 列里是否包含北京和上海,提取符合条件的数据:")
print(df_beijing_shanghai)
"""
判断 city 列里是否包含北京和上海,提取符合条件的数据:
   age name city  price category       date
0   25   小明   北京   2500     A-10 2013-01-01
1   30   小红   上海   4000     B-20 2013-01-02
3   35   小美   北京   3000     C-25 2013-01-04
"""

1.10.提取前三个字符,并生成数据表

语法:

pd.DataFrame(df_inner['category'].str[:3])

案例:df_inner['category'].str[:3] 提取 category 列中每个元素的前三个字符,并使用 pd.DataFrame() 创建一个新的 DataFrame。# 提取 category 列的前三个字符,并生成数据表

category_first3 = pd.DataFrame(df_inner['category'].str[:3])
print("\n提取 category 列的前三个字符,并生成数据表:")
print(category_first3)
"""
提取 category 列的前三个字符,并生成数据表:
  category
0      A-1
1      B-2
2      A-1
3      C-2
"""

二、数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。

2.1.使用“与”进行筛选

筛选 age 大于 25 且 price 小于 3500 的数据:

import pandas as pd

# 示例数据
data = {
    'age': [25, 30, 20, 35, 28, 22],
    'name': ['小明', '小红', '小刚', '小美', '小强', '小华'],
    'city': ['北京', '上海', '广州', '北京', '上海', '广州'],
    'price': [2500, 4000, 1500, 3000, 3500, 2800],
    'category': ['A-10', 'B-20', 'A-15', 'C-25', 'B-30', 'A-20'],
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category
0   25   小明   北京   2500     A-10
1   30   小红   上海   4000     B-20
2   20   小刚   广州   1500     A-15
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
5   22   小华   广州   2800     A-20
"""

and_filtered = df_inner[(df_inner['age'] > 25) & (df_inner['price'] < 3500)]
print("\n使用“与”进行筛选:")
print(and_filtered)
"""
使用“与”进行筛选:
   age name city  price category
3   35   小美   北京   3000     C-25
"""

2.2.使用“或”进行筛选

筛选 city 为 “北京” 或 price 大于 3000 的数据:

or_filtered = df_inner[(df_inner['city'] == '北京') | (df_inner['price'] > 3000)]
print("\n使用“或”进行筛选:")
print(or_filtered)
"""
使用“或”进行筛选:
   age name city  price category
0   25   小明   北京   2500     A-10
1   30   小红   上海   4000     B-20
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
"""

2.3.使用“非”条件进行筛选

筛选 city 不等于 “广州” 的数据:

# ~取反
not_filtered = df_inner[~(df_inner['city'] == '广州')]
print("\n使用“非”条件进行筛选:")
print(not_filtered)
"""
使用“非”条件进行筛选:
   age name city  price category
0   25   小明   北京   2500     A-10
1   30   小红   上海   4000     B-20
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
"""

2.4.对筛选后的数据按city列进行计数

value_counts() 是 pandas 中的一个方法,用于计算一个 Series 中每个唯一值的出现次数,并返回一个按降序排列的 Series。这个方法通常用于数据分析和数据清理过程中,以便快速了解数据的分布情况。

Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)

参数说明

  • normalize: 布尔值,如果为 True,则返回相对频率(即每个唯一值的比例),而不是绝对频率。
  • sort: 布尔值,如果为 True,则按值的频率排序。如果为 False,则按值的顺序排序。
  • ascending: 布尔值,控制排序顺序。如果为 True,则按升序排列。
  • bins: 整数,表示要将数据分成的等宽区间的数量。如果指定此参数,返回的是区间及其频率。
  • dropna: 布尔值,控制是否包含 NaN 值。如果为 True,NaN 值将被忽略。

统计了在筛选后的数据中每个城市(city 列的唯一值)出现的次数。

# 筛选 price 大于 2500 的数据
filtered_data = df_inner[df_inner['price'] > 2500]
"""
   age name city  price category
1   30   小红   上海   4000     B-20
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
5   22   小华   广州   2800     A-20
"""

# 对筛选后的数据按 city 列进行计数
city_counts = filtered_data['city'].value_counts()
print("\n筛选后的数据按 city 列进行计数:")
print(city_counts)
"""
筛选后的数据按 city 列进行计数:
city
上海    2
北京    1
广州    1
"""

2.5.使用query函数进行筛选

筛选 age 大于 25 且 price 小于 3500 的数据:

query_filtered = df_inner.query('age > 25 and price < 3500')
print("\n使用 query 函数进行筛选:")
print(query_filtered)
"""
使用 query 函数进行筛选:
   age name city  price category
3   35   小美   北京   3000     C-25
"""

2.6.对筛选后的结果按price进行求和

sum() 函数在 pandas 中用于对 DataFrame 或 Series 进行求和操作。它可以对每列或每行的数值进行求和,返回一个包含求和结果的 Series。这个函数广泛用于数据分析和处理任务中。

语法

DataFrame.sum(axis=None, skipna=True, level=None, numeric_only=None, min_count=0) Series.sum(axis=None, skipna=True, level=None, numeric_only=None, min_count=0)

参数说明

  • axis: 控制求和的方向。0'index' 表示按列求和(即对每列的所有值求和),1'columns' 表示按行求和(即对每行的所有值求和)。默认值为 0
  • skipna: 布尔值,表示是否忽略缺失值(NaN)。如果为 True(默认值),则忽略 NaN 值进行求和。
  • level: 如果指定了 MultiIndex(多级索引),可以沿着指定级别进行聚合。
  • numeric_only: 布尔值或 None。若为 True,则只包括数字列。如果为 None,则尝试包括所有列。
  • min_count: 整数,表示需要参与求和操作的最少非 NaN 元素个数。如果少于该数目,则返回 NaN。

案例:对于price 大于 2500 的数据进行求和:

import pandas as pd

# 示例数据
data = {
    'age': [25, 30, 20, 35, 28, 22],
    'name': ['小明', '小红', '小刚', '小美', '小强', '小华'],
    'city': ['北京', '上海', '广州', '北京', '上海', '广州'],
    'price': [2500, 4000, 1500, 3000, 3500, 2800],
    'category': ['A-10', 'B-20', 'A-15', 'C-25', 'B-30', 'A-20'],
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   age name city  price category
0   25   小明   北京   2500     A-10
1   30   小红   上海   4000     B-20
2   20   小刚   广州   1500     A-15
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
5   22   小华   广州   2800     A-20
"""

# 1.筛选 price 大于 2500 的数据
filtered_data = df_inner[df_inner['price'] > 2500]
print(filtered_data)
"""
   age name city  price category
1   30   小红   上海   4000     B-20
3   35   小美   北京   3000     C-25
4   28   小强   上海   3500     B-30
5   22   小华   广州   2800     A-20
"""

# 2.对筛选后的结果按 price 进行求和
and_price_sum = filtered_data['price'].sum()
print("\n对于price 大于 2500 的数据进行求和: ")
print(and_price_sum)
"""
按“与”条件筛选后的结果按 price 进行求和:
13300
"""

三、数据汇总

3.1.对所有的列进行计数汇总

groupby() 函数是 pandas 中的一个重要方法,用于对数据进行分组,然后对每个组应用聚合函数。它类似于 SQL 中的 GROUP BY 操作,是数据分组和汇总的核心工具。

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)

参数说明

  • by: 用于分组的列名、数组、列表、字典或函数。
  • axis: 控制分组的方向。0'index' 表示按行分组,1'columns' 表示按列分组。默认值为 0
  • level: 如果使用 MultiIndex(多级索引),则可以指定索引级别进行分组。
  • as_index: 布尔值,默认为 True。若为 True,则分组键成为结果的索引;若为 False,则分组键作为列保留在结果中。
  • sort: 布尔值,默认为 True。若为 True,则按分组键对结果进行排序;若为 False,则保持输入顺序。
  • group_keys: 布尔值,默认为 True。若为 True,则将分组键加到结果中。
  • squeeze: 布尔值,默认为 NoDefault.no_default。若为 True,则如果结果是单列 Series,则返回 Series 而不是 DataFrame。
  • observed: 布尔值,默认为 False。若为 True,则仅保留分组键的观察值(用于分类数据)。
  • dropna: 布尔值,默认为 True。若为 True,则丢弃所有含有 NaN 值的分组。

案例:按照 city 列对数据进行分组,并对每一列的数据进行计数。

import pandas as pd

# 示例数据
data = {
    'id': [1, 2, 3, 4, 5, 6],
    'age': [25, 30, 20, 35, 28, 22],
    'name': ['小明', '小红', '小刚', '小美', '小强', '小华'],
    'city': ['北京', '上海', '广州', '北京', '上海', '广州'],
    'price': [2500, 4000, 1500, 3000, 3500, 2800],
    'category': ['A-10', 'B-20', 'A-15', 'C-25', 'B-30', 'A-20'],
    'size': ['S', 'M', 'S', 'L', 'M', 'S']
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)

count_all = df_inner.groupby('city').count()
print("\n对所有的列进行计数汇总:")
print(count_all)
"""
city                                      
上海     2    2     2      2         2     2
北京     2    2     2      2         2     2
广州     2    2     2      2         2     2
"""

3.2.按城市对id字段进行计数

语法:

df_inner.groupby('city')['id'].count()

案例:按照 city 列对数据进行分组,并对 id 列进行计数。

count_id = df_inner.groupby('city')['id'].count()
print("\n按城市对 id 字段进行计数:")
print(count_id)
"""
按城市对 id 字段进行计数:
city
上海    2
北京    2
广州    2
Name: id, dtype: int64
"""

3.3.对两个字段进行汇总计数

语法:

df_inner.groupby(['city','size'])['id'].count()

案例:按照 citysize 列对数据进行分组,并对 id 列进行计数

count_two_fields = df_inner.groupby(['city', 'size'])['id'].count()
print("\n对两个字段进行汇总计数:")
print(count_two_fields)
"""
对两个字段进行汇总计数:
city  size
上海    M       2
北京    L       1
       S       1
广州    S       2
Name: id, dtype: int64
"""

3.4.对city字段进行汇总,并分别计算prince的合计和均值

agg() 函数在 pandas 中用于对 DataFrame 或 Series 执行一组聚合操作。它允许你同时应用多个聚合函数,可以对不同的列应用不同的聚合操作,从而提供了灵活和强大的数据汇总功能。语法

DataFrame.agg(func=None, axis=0, *args, **kwargs) Series.agg(func=None, axis=0, *args, **kwargs)

参数说明

  • func: 聚合函数或函数名的字符串、列表或字典。可以是单个函数、函数名的字符串,或者这些元素组成的列表或字典。
  • axis: 控制聚合操作的方向。0'index' 表示按列聚合,1'columns' 表示按行聚合。默认值为 0
  • args: 传递给聚合函数的位置参数。
  • kwargs: 传递给聚合函数的关键字参数。

⑴.对 DataFrame 应用单个聚合函数

# 示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

# 对 DataFrame 应用单个聚合函数
result = df.agg('sum')
print("DataFrame sum by columns:\n", result)

输出:

DataFrame sum by columns:
A     6
B    15
C    24
dtype: int64

⑵.对 DataFrame 应用多个聚合函数

# 对 DataFrame 应用多个聚合函数
result = df.agg(['sum', 'mean'])
print("DataFrame multiple aggregations by columns:\n", result)

输出:

DataFrame multiple aggregations by columns:
            A    B    C
sum       6.0  15.0  24.0
mean      2.0   5.0   8.0

⑶.案例:按照 city 列对数据进行分组,并对 price 列进行统计,计算数据的数量、总和和均值。

# 对 city 字段进行汇总,并分别计算 price 的合计和均值
agg_price = df_inner.groupby('city')['price'].agg([len, 'sum', 'mean'])
print("\n对 city 字段进行汇总,并分别计算 price 的合计和均值:")
print(agg_price)
"""
对 city 字段进行汇总,并分别计算 price 的合计和均值:
      len   sum    mean
city                   
上海      2  7500  3750.0
北京      2  5500  2750.0
"""

四、数据统计

数据统计解释总结:

  • 采样:用于从数据中获取子集,以便进一步分析或建模。
  • 描述性统计:提供数据的基本特征,帮助理解数据分布和变异性。
  • 标准差:衡量数据的离散程度。
  • 协方差:度量两个变量之间的共同变动程度。
  • 相关系数:评估两个变量之间的线性关系。

4.1.简单的数据采样

sample_simple = df_inner.sample(n=3)
print("\n简单的数据采样:")
print(sample_simple)

作用和含义:

  • 作用:从数据集中随机抽取 3 条记录。
  • 含义:简单随机采样有助于获取数据的代表性样本,用于进一步分析或测试。

4.2.手动设置采样权重

weights = [0, 0, 0, 0, 0.5, 0.5]
sample_weights = df_inner.sample(n=2, weights=weights)
print("\n手动设置采样权重:")
print(sample_weights)

作用和含义:

  • 作用:根据指定的权重进行随机抽样,权重较大的记录被抽中的概率较高。
  • 含义:权重采样用于在抽样过程中赋予某些记录更高的优先级,适用于偏好特定记录的场景。

4.3.采样后不放回

sample_no_replace = df_inner.sample(n=6, replace=False)
print("\n采样后不放回:")
print(sample_no_replace)

作用和含义:

  • 作用:从数据集中随机抽取 6 条记录,不放回,即每条记录只能被抽取一次。
  • 含义:不放回抽样确保每条记录只能出现一次,用于需要唯一样本的情况

4.4.采样后放回

sample_replace = df_inner.sample(n=6, replace=True)
print("\n采样后放回:")
print(sample_replace)

作用和含义:

  • 作用:从数据集中随机抽取 6 条记录,放回,即同一条记录可以被抽取多次。
  • 含义:放回抽样允许重复记录,适用于需要模拟重复试验的情况

4.5.数据表描述性统计

desc_stats = df_inner.describe().round(2).T
print("\n数据表描述性统计:")
print(desc_stats)

作用和含义:

  • 作用:生成数据表的描述性统计信息,包括计数、均值、标准差、最小值、四分位数和最大值。
  • 含义:描述性统计提供数据的基本特征概览,帮助理解数据分布和变异性。

4.6.计算列的标准差

std_price = df_inner['price'].std()
print("\n计算列的标准差:")
print(f"price 列的标准差: {std_price:.2f}")

作用和含义:

  • 作用:计算 price 列的标准差。
  • 含义:标准差度量数据的离散程度,表示价格数据的波动范围。

4.7.计算两个字段间的协方差

cov_price_mpoint = df_inner['price'].cov(df_inner['m-point'])
print("\n计算两个字段间的协方差:")
print(f"price 和 m-point 列的协方差: {cov_price_mpoint:.2f}")

作用和含义:

  • 作用:计算 pricem-point 列的协方差。
  • 含义:协方差度量两个变量共同变化的方向和程度,正值表示正相关,负值表示负相关。

4.8.数据表中所有字段间的协方差

pandas 在计算协方差矩阵时需要将所有列转换为浮点数,这些非数值类型的数据会导致转换失败。

# 8.数据表中所有字段间的协方差
# select_dtypes(include=[float, int]) 方法选择所有数值类型的列,然后对选中的数值类型列计算协方差。
df_numeric = df_inner.select_dtypes(include=[float, int])
cov_all = df_numeric.cov()
print("\n数据表中所有字段间的协方差:")
print(cov_all)
"""
数据表中所有字段间的协方差:
            id          age          price  m-point
id         3.5    -0.600000     150.000000      4.5
age       -0.6    30.266667    3153.333333    -11.8
price    150.0  3153.333333  741666.666667   2450.0
m-point    4.5   -11.800000    2450.000000     51.5
"""

作用和含义:

  • 作用:计算数据表中float、int字段间的协方差矩阵。
  • 含义:协方差矩阵展示了所有变量之间的协方差关系,帮助理解变量间的共同变动情况。

4.9.两个字段的相关性分析

corr_price_mpoint = df_inner['price'].corr(df_inner['m-point'])
print("\n两个字段的相关性分析:")
print(f"price 和 m-point 列的相关系数: {corr_price_mpoint:.2f}")

作用和含义:

  • 作用:计算 pricem-point 列的相关系数。
  • 含义:相关系数度量两个变量间的线性关系,值在 -1 到 1 之间,接近 1 表示强正相关,接近 -1 表示强负相关,接近 0 表示无相关性。

4.10.数据表的相关性分析

pandas 在计算相关性矩阵时需要将所有列转换为浮点数,所以需要选择数值列或者数组均为数值才可以。

# 选择数值类型的列
df_numeric = df_inner.select_dtypes(include=[float, int])
corr_all = df_numeric.corr()
print("\n数据表的相关性分析:")
print(corr_all)

作用和含义:

  • 作用:计算数据表中数值字段间的相关系数矩阵。
  • 含义:相关系数矩阵展示了所有变量之间的线性关系,有助于识别显著相关的变量对。

完整代码:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'id': [1, 2, 3, 4, 5, 6],
    'age': [25, 30, 20, 35, 28, 22],
    'name': ['小明', '小红', '小刚', '小美', '小强', '小华'],
    'city': ['北京', '上海', '广州', '北京', '上海', '广州'],
    'price': [2500, 4000, 1500, 3000, 3500, 2800],
    'category': ['A-10', 'B-20', 'A-15', 'C-25', 'B-30', 'A-20'],
    'm-point': [80, 90, 85, 75, 95, 88]
}

# 创建DataFrame
df_inner = pd.DataFrame(data)
print("原始DataFrame:")
print(df_inner)
"""
原始DataFrame:
   id  age name city  price category  m-point
0   1   25   小明   北京   2500     A-10       80
1   2   30   小红   上海   4000     B-20       90
2   3   20   小刚   广州   1500     A-15       85
3   4   35   小美   北京   3000     C-25       75
4   5   28   小强   上海   3500     B-30       95
5   6   22   小华   广州   2800     A-20       88
"""

# 1.简单的数据采样
sample_simple = df_inner.sample(n=3)
# print(sample_simple)

# 2.手动设置采样权重
weights = [0, 0, 0, 0, 0.5, 0.5]
sample_weights = df_inner.sample(n=2, weights=weights)
print("\n手动设置采样权重:")
print(sample_weights)
"""
手动设置采样权重: 由于前四条权重为0,则没有出现
   id  age name city  price category  m-point
4   5   28   小强   上海   3500     B-30       95
5   6   22   小华   广州   2800     A-20       88
"""

# 3.采样后不放回
sample_no_replace = df_inner.sample(n=3, replace=False)
print("\n采样后不放回:")
print(sample_no_replace)

# 4.采样后放回
sample_replace = df_inner.sample(n=6, replace=True)
print("\n采样后放回:")
print(sample_replace)

# 5.数据表描述性统计
desc_stats = df_inner.describe().round(2).T
print("\n数据表描述性统计:")
print(desc_stats)
"""
数据表描述性统计:包括计数、均值、标准差、最小值、四分位数和最大值。
         count     mean     std     min      25%     50%      75%     max
id         6.0     3.50    1.87     1.0     2.25     3.5     4.75     6.0
age        6.0    26.67    5.50    20.0    22.75    26.5    29.50    35.0
price      6.0  2883.33  861.20  1500.0  2575.00  2900.0  3375.00  4000.0
m-point    6.0    85.50    7.18    75.0    81.25    86.5    89.50    95.0
"""

# 6.计算列的标准差
std_price = df_inner['price'].std()
print("\n计算列的标准差:")
print(f"price 列的标准差: {std_price:.2f}")
"""
计算列的标准差:
price 列的标准差: 861.20
"""

# 7.计算两个字段间的协方差
cov_price_mpoint = df_inner['price'].cov(df_inner['m-point'])
print("\n计算两个字段间的协方差:")
print(f"price 和 m-point 列的协方差: {cov_price_mpoint:.2f}")
"""
计算两个字段间的协方差:
price 和 m-point 列的协方差: 2450.00
"""

# 8.数据表中所有字段间的协方差
# select_dtypes(include=[float, int]) 方法选择所有数值类型的列,然后对选中的数值类型列计算协方差。
df_numeric = df_inner.select_dtypes(include=[float, int])
cov_all = df_numeric.cov()
print("\n数据表中所有字段间的协方差:")
print(cov_all)
"""
数据表中所有字段间的协方差:
            id          age          price  m-point
id         3.5    -0.600000     150.000000      4.5
age       -0.6    30.266667    3153.333333    -11.8
price    150.0  3153.333333  741666.666667   2450.0
m-point    4.5   -11.800000    2450.000000     51.5
"""

# 9.两个字段的相关性分析
corr_price_mpoint = df_inner['price'].corr(df_inner['m-point'])
print("\n两个字段的相关性分析:")
print(f"price 和 m-point 列的相关系数: {corr_price_mpoint:.2f}")
"""
两个字段的相关性分析:
price 和 m-point 列的相关系数: 0.40
"""

# 10.数据表的相关性分析
# 选择数值类型的列
df_numeric = df_inner.select_dtypes(include=[float, int])
corr_all = df_numeric.corr()
print("\n数据表的相关性分析:")
print(corr_all)
"""
数据表的相关性分析:
               id       age     price   m-point
id       1.000000 -0.058295  0.093101  0.335178
age     -0.058295  1.000000  0.665554 -0.298879
price    0.093101  0.665554  1.000000  0.396422
m-point  0.335178 -0.298879  0.396422  1.000000
"""

五、数据输出

分析后的数据可以输出为xlsx格式和csv格式

5.1.写入Excel

将数据写入到Excel

pandas数据分析(二)_数据_03

语法:

df_inner.to_excel('excel_to_python.xlsx', sheet_name='data')

生成Excel如下:

pandas数据分析(二)_参数说明_04

5.2.写入到CSV

语法:

df_inner.to_csv('csv_to_python.xlsx')