飞不高 发表于 2025-6-23 02:59:19

「数据分析 - Pandas 函数」【数据分析全栈攻略:爬虫+处置惩罚+可视化+陈诉】

- 第 105 篇 -
Date: 2025 - 06 - 05
Author: 郑龙浩/仟墨
Pandas 核心功能详解与示例



1. 数据布局基础

1.1 Series 创建与操作

Series 是 Pandas 库中的一维带标签数组,可以简单明白为 Excel 中的单列数据(但功能更强盛)。它是构建 DataFrame 的基础组件,也是数据操作的核心对象之一。
创建Series:
pd.Series(
    data=None,      # 数据(列表、字典、标量等)
    index=None,       # 索引(标签)
    dtype=None,       # 数据类型
    name=None,      # Series 名称
    copy=False,       # 是否复制数据
    fastpath=False    # 内部优化参数(通常不直接使用)
)


[*]data 是必须的,其他参数可选。
[*]index 用于自定义标签,dtype 控制数据类型,name 用于定名 Series。
[*]copy 一般不用改,除非需要避免数据被意外修改。
import pandas as pd
import numpy as np

# 从列表创建
arr1 = pd.Series()# 自动生成整数索引
print(arr1)
'''
0    1
1    2
2    3
dtype: int64
'''

arr2 = pd.Series(, index=['a', 'b', 'c'])# 自定义索引
print(arr2)
'''
a    1
b    2
c    3
dtype: int64
'''

arr3 = pd.Series(, dtype=float)# 指定float类型
print(arr3)
'''
0    1.0
1    2.0
2    3.0
dtype: float64
'''

# 从字典创建(自动使用字典键作为索引)
arr4 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(arr4)
'''
a    1
b    2
c    3
dtype: int64
'''

data =
idx = ['A', 'B', 'C']
arr5 = pd.Series(data=data, index=idx, name='名字')
print(arr5)
'''
A    10
B    20
C    30
Name: 名字, dtype: int64
'''
Series操作:
import pandas as pd
import numpy as np
#
# # 从列表创建
# arr1 = pd.Series()# 自动生成整数索引
# print(arr1)
# '''
# 0    1
# 1    2
# 2    3
# dtype: int64
# '''
#
# arr2 = pd.Series(, index=['a', 'b', 'c'])# 自定义索引
# print(arr2)
# '''
# a    1
# b    2
# c    3
# dtype: int64
# '''
#
# arr3 = pd.Series(, dtype=float)# 指定float类型
# print(arr3)
# '''
# 0    1.0
# 1    2.0
# 2    3.0
# dtype: float64
# '''
#
# # 从字典创建(自动使用字典键作为索引)
# arr4 = pd.Series({'a': 1, 'b': 2, 'c': 3})
# print(arr4)
# '''
# a    1
# b    2
# c    3
# dtype: int64
# '''

data =
idx = ['A', 'B', 'C']
arr5 = pd.Series(data=data, index=idx, name='名字')
print(arr5)
'''
A    10
B    20
C    30
Name: 名字, dtype: int64
'''

# 索引访问某个元素
print(arr5['B']) # 20

# 向量化运算
print(arr5 * 2) # 所有元素 * 2
'''
A    20
B    40
C    60
Name: 名字, dtype: int64
'''

# 布尔索引
print(arr5) # 取出 arr5 中,大于15的元素
'''
B    20
C    30
Name: 名字, dtype: int64
'''
1.2 DataFrame 创建与操作

DataFrame 是 Pandas 库中最核心的二维表格型数据布局,相当于 Python 中的"电子表格"或"SQL表"。它的重要作用是为数据分析和处置惩罚提供高效灵活的工具,以下是其核心作用和特点
创建DataFrame:
import pandas as pd
import numpy as np

# 从字典创建
df1 = pd.DataFrame({
    'A': 1.0,
    'B': pd.Timestamp('2025-06-05'),
    'C': pd.Series(1, index=list(range(4))),
    'D': np.array( * 4),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'aaa'
})
print(df1)
"""
   A          BCD      E    F
01.0 2025-06-0513   testaaa
11.0 2025-06-0513trainaaa
21.0 2025-06-0513   testaaa
31.0 2025-06-0513trainaaa
"""

# 从二维数组创建
df2 = pd.DataFrame(np.random.randn(6, 4), columns=list('ABCD'))
print(df2.head(2))
"""
          A         B         C         D
0 -1.043791 -0.519411 -0.204117 -1.169345
1 -0.3864090.978335 -0.092777 -1.832369
"""
DataFrame操作:
# 查看前几行
print(df2.head(2))

# 查看统计信息
print(df2.describe())
"""
            A         B         C         D
count6.0000006.0000006.0000006.000000
mean   0.073711 -0.431125 -0.687758 -0.233103
std    0.8431570.9228180.7798870.973118
min   -0.861849 -2.104569 -1.509059 -1.135632
25%   -0.611510 -0.600794 -1.368714 -1.006602
50%    0.022072 -0.228039 -0.767252 -0.386671
75%    0.6584440.041933 -0.0343260.461706
max    1.2121120.5670200.2762321.491390
"""

# 转置
print(df2.T)
2. 数据选择与过滤

2.1 根本选择方法

# 选择列
print(df2['A'])# 选择单列
print(df2[['A', 'C']])# 选择多列

# 使用loc按标签选择
print(df2.loc])
"""
          A         B
00.469112 -0.282863
11.212112 -0.173215
2 -0.861849 -2.104569
30.721555 -0.706771
"""

# 使用iloc按位置选择
print(df2.iloc)
"""
          A         B
11.212112 -0.173215
2 -0.861849 -2.104569
"""
2.2 布尔索引

# 简单条件过滤
print(df2 > 0])
"""
          A         B         C         D
00.469112 -0.282863 -1.509059 -1.135632
11.212112 -0.1732150.119209 -1.044236
30.721555 -0.706771 -1.0395750.271860
50.4047050.577046 -1.715002 -1.039268
"""

# 多条件组合
print(df2[(df2['A'] > 0) & (df2['B'] < 0)])
"""
          A         B         C         D
00.469112 -0.282863 -1.509059 -1.135632
11.212112 -0.1732150.119209 -1.044236
30.721555 -0.706771 -1.0395750.271860
"""
3. 数据处置惩罚与洗濯

3.1 缺失值处置惩罚

# 创建含缺失值的DataFrame
df3 = pd.DataFrame({
    'A': ,
    'B': ,
    'C':
})
print(df3)
"""
   A    B   C
01.05.010
12.0NaN20
2NaNNaN30
34.08.040
"""

# 检测缺失值
print(df3.isnull())
"""
       A      B      C
0FalseFalseFalse
1False   TrueFalse
2   True   TrueFalse
3FalseFalseFalse
"""

# 删除缺失值
print(df3.dropna())
"""
   A    B   C
01.05.010
34.08.040
"""

# 填充缺失值
print(df3.fillna(value=0))
"""
   A    B   C
01.05.010
12.00.020
20.00.030
34.08.040
"""
3.2 数据转换

# 应用函数
print(df3['A'].apply(lambda x: x**2 if not pd.isnull(x) else 0))
"""
0    1.0
1    4.0
2    0.0
3   16.0
Name: A, dtype: float64
"""

# 元素级转换
print(df3.applymap(lambda x: '%.1f' % x if not pd.isnull(x) else 'NaN'))
"""
   A    B    C
01.05.0 10.0
12.0NaN 20.0
2NaNNaN 30.0
34.08.0 40.0
"""
4. 数据分组与聚合

4.1 根本分组操作

df4 = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
})
print(df4)
"""
   A      B         C         D
0foo    one0.469112 -0.861849
1bar    one -0.282863 -2.104569
2foo    two -1.509059 -0.494929
3barthree -1.1356321.071804
4foo    two1.2121120.721555
5bar    two -0.173215 -0.706771
6foo    one0.119209 -1.039575
7foothree -1.0442360.271860
"""

# 单列分组
grouped = df4.groupby('A')
print(grouped.mean())
"""
            C         D
A                     
bar -0.530570 -0.579845
foo -0.150572 -0.280588
"""

# 多列分组
print(df4.groupby(['A', 'B']).mean())
"""
                  C         D
A   B                        
bar one   -0.282863 -2.104569
    three -1.1356321.071804
    two   -0.173215 -0.706771
foo one    0.294161 -0.950712
    three -1.0442360.271860
    two   -0.1484730.113313
"""
4.2 聚合函数

# 多种聚合函数
print(grouped.agg(['sum', 'mean', 'std']))
"""
      C                           D                  
      sum      mean       std       sum      mean       std
A                                                         
bar -1.591710 -0.5305700.526860 -1.739536 -0.5798451.591985
foo -0.752862 -0.1505721.113308 -1.402938 -0.2805880.739965
"""

# 不同列应用不同聚合
print(grouped.agg({'C': 'sum', 'D': ['min', 'max']}))
"""
            C    D         
          sum   min       max
A                           
bar -1.591710 -2.1045691.071804
foo -0.752862 -1.0395750.721555
"""
5. 数据合并与连接

5.1 concat 连接

df5 = pd.DataFrame(np.random.randn(3, 4), columns=['A', 'B', 'C', 'D'])
df6 = pd.DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'])

# 纵向连接
print(pd.concat())
"""
          A         B         C         D
01.075770 -0.1090501.643563 -1.469388
10.357021 -0.674600 -1.776904 -0.968914
2 -1.2945240.4137380.276662 -0.472035
0 -0.013960 -0.362543 -0.006154       NaN
1 -0.9230610.8957170.805244       NaN
"""

# 横向连接
print(pd.concat(, axis=1))
"""
          A         B         C         D         A         B         C
01.075770 -0.1090501.643563 -1.469388 -0.013960 -0.362543 -0.006154
10.357021 -0.674600 -1.776904 -0.968914 -0.9230610.8957170.805244
2 -1.2945240.4137380.276662 -0.472035       NaN       NaN       NaN
"""
5.2 merge 合并

left = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

right = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 内连接
print(pd.merge(left, right, on='key'))
"""
key   A   B   C   D
0K0A0B0C0D0
1K1A1B1C1D1
2K2A2B2C2D2
3K3A3B3C3D3
"""

# 左连接
print(pd.merge(left, right, how='left', on='key'))
"""
key   A   B    C    D
0K0A0B0   C0   D0
1K1A1B1   C1   D1
2K2A2B2   C2   D2
3K3A3B3   C3   D3
"""
6. 时间序列处置惩罚

# 创建时间序列
date_rng = pd.date_range(start='1/1/2025', end='1/08/2025', freq='D')
df7 = pd.DataFrame(date_rng, columns=['date'])
df7['data'] = np.random.randint(0,100,size=(len(date_rng)))
print(df7)
"""
      datedata
0 2025-01-01    95
1 2025-01-02    27
2 2025-01-03    63
3 2025-01-04    60
4 2025-01-05    49
5 2025-01-06    42
6 2025-01-07    96
7 2025-01-08    99
"""

# 重采样
df7.set_index('date', inplace=True)
print(df7.resample('3D').mean())
"""
            data
date            
2025-01-0161.666667
2025-01-0450.333333
2025-01-0797.500000
"""
7. 文件读写

7.1 CSV文件

# 写入CSV
df7.to_csv('sample.csv')

# 读取CSV
df_read = pd.read_csv('sample.csv')
print(df_read.head())
"""
      datedata
0 2025-01-01    95
1 2025-01-02    27
2 2025-01-03    63
3 2025-01-04    60
4 2025-01-05    49
"""
7.2 Excel文件

# 写入Excel
df7.to_excel('sample.xlsx', sheet_name='Sheet1')

# 读取Excel
df_excel = pd.read_excel('sample.xlsx')
print(df_excel.head())
7.3 JSON文件

# 写入JSON
df7.to_json('sample.json')

# 读取JSON
df_json = pd.read_json('sample.json')
print(df_json.head())

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 「数据分析 - Pandas 函数」【数据分析全栈攻略:爬虫+处置惩罚+可视化+陈诉】