1、Pandas 数据结构:从 Series 到 DataFrame

目录

Series

创建 Series

Series 索引和选择

DataFrame

创建 DataFrame

DataFrame 索引和选择

DataFrame 操作和转换

数据结构转换


Series

        Series 是 Pandas 中的一维数组形式的数据结构,它可以包含任何数据类型(整数、字符串、浮点数、Python对象等)。Series 基本上可以被视作一个定长的有序字典,因为它是索引值到数据值的一个映射。

创建 Series

        可以使用 pd.Series(data, index=index) 来创建 Series,其中 data 可以是列表、字典、ndarray 等,index 是数据索引标签。

import pandas as pd

# 从列表创建 Series
s1 = pd.Series([1, 3, 5, 7, 9])
print(s1)
print("=="*10)

# 从字典创建 Series
s2 = pd.Series({'a': 100, 'b': 200, 'c': 300})
print(s2)
print("=="*10)

# 从 ndarray 创建 Series
s3 = pd.Series(pd.date_range('20230101', periods=6))
print(s3)

结果:

0    1
1    3
2    5
3    7
4    9
dtype: int64
====================
a    100
b    200
c    300
dtype: int64
====================
0   2023-01-01
1   2023-01-02
2   2023-01-03
3   2023-01-04
4   2023-01-05
5   2023-01-06
dtype: datetime64[ns]

Series 索引和选择

Series 支持基于位置和基于标签的索引。

# 选择第四个元素
print(s1[3])

# 选择索引标签为 'b' 的元素
print(s2['b'])

# 选择前三个元素
print(s1[:3])

结果:

7
200
0    1
1    3
2    5

DataFrame

        DataFrame 是 Pandas 中的二维表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被看作是由 Series 组成的字典。

创建 DataFrame

        可以使用 pd.DataFrame(data, index=index, columns=columns) 来创建 DataFrame,其中 data 可以是字典、ndarray、Series 或另一个 DataFrame。

import numpy as np
import pandas as pd

# 从字典创建 DataFrame
df1 = pd.DataFrame({
    'A': 1.,
    'B': pd.Timestamp('20230102'),
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
    'D': np.array([3] * 4, dtype='int32'),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'foo'
})
print(df1)

# 从二维ndarray创建 DataFrame
df2 = pd.DataFrame(np.random.randn(6, 4), columns=['A', 'B', 'C', 'D'])
print(df2)

结果:

     A          B    C  D      E    F
0  1.0 2023-01-02  1.0  3   test  foo
1  1.0 2023-01-02  1.0  3  train  foo
2  1.0 2023-01-02  1.0  3   test  foo
3  1.0 2023-01-02  1.0  3  train  foo
          A         B         C         D
0 -0.434026  0.948463  0.386731  0.814795
1 -0.317982 -2.987843  0.519228 -1.365834
2 -2.120951  0.385530 -0.066971  0.089497
3 -1.299795  0.648691 -1.954919 -0.441423
4  0.789665  0.819811 -0.519527 -0.157360
5  0.701758  0.455677 -0.418348  0.518226

DataFrame 索引和选择

DataFrame 提供了多种方法来选择和索引:

# 选择单独的一列,返回一个 Series
print(df1['A'])

# 利用 loc 选择行
print(df2.loc[0])

# 通过位置选择
print(df2.iloc[3])

# 切片选择行
print(df2[2:5])

# 布尔索引
print(df1[df1['A'] > 0])

结果:

0    1.0
1    1.0
2    1.0
3    1.0
Name: A, dtype: float64
A    0.463703
B   -0.132394
C   -1.097140
D    0.617243
Name: 0, dtype: float64
A    1.522528
B    1.262699
C    1.334090
D   -1.488483
Name: 3, dtype: float64
          A         B         C         D
2 -0.382140  2.616053  1.539264  0.486279
3  1.522528  1.262699  1.334090 -1.488483
4 -0.272724  4.060280  1.894378  0.794090
     A          B    C  D      E    F
0  1.0 2023-01-02  1.0  3   test  foo
1  1.0 2023-01-02  1.0  3  train  foo
2  1.0 2023-01-02  1.0  3   test  foo
3  1.0 2023-01-02  1.0  3  train  foo

DataFrame 操作和转换

DataFrame 支持各种操作,包括数据清洗、转换、聚合等。

# 设置新的一列
df1['G'] = df1['A'] * 2
print(df1)

# 删除一列
df1.drop(columns='G', inplace=True)

# 聚合操作
print(df1.mean())

数据结构转换

Series 与 DataFrame 之间可以相互转换:

# Series 转 DataFrame
s_to_df = s1.to_frame()

# DataFrame 转 Series
df_to_s = df1['A']