数据分析 — Pandas 数据处理-二、数据结构

时间:2024-02-18 18:39:40

1、Series

  • 基本属性

values:返回底层的 NumPy 数组,包含 Series 中的数据。

index:返回索引对象,提供标签信息,用于标识每个数据点。

dtype:返回数据的数据类型,表示 Series 中存储的元素类型。

shape:返回数据的形状,对于一维数据,返回的是单元素元组。

size:返回数据的元素个数,表示 Series 中包含的数据点的数量。

nbytes:返回数据的字节大小,即存储数据所需的字节数。

ndim:返回数据的维度,对于 Series 来说,始终为1。

name:返回或设置 Series 的名称,可以用于标识 Series 对象的用途或含义。

import pandas as pd  # 导入 Pandas 库并使用别名 pd

# 创建一个 Series 对象
s = pd.Series([1, 2, 3, 4, 5], name='my_series')

print(s.values)  # [1 2 3 4 5]
print(s.index)  # RangeIndex(start=0, stop=5, step=1)
print(s.dtype)  # int64
print(s.shape)  # (5,)
print(s.size)  # 5
print(s.nbytes)  # 40
print(s.ndim)  # 1
print(s.name)  # my_series
  • 创建
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np

# 从列表创建 Series
s1 = pd.Series([1, 2, 3, 4, 5])
print(s1)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64

# 从字典创建 Series
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s2)
# a    1
# b    2
# c    3
# dtype: int64

# 从 Numpy 数组创建 Series
s3 = pd.Series(np.array([1, 2, 3, 4, 5]))
print(s3)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int32

# 从字典和标签列表创建 Series
s4 = pd.Series({'a': 1, 'b': 2, 'c': 3}, index=['a', 'b', 'c'])
print(s4)
# a    1
# b    2
# c    3
# dtype: int64
  • 取值
import pandas as pd  # 导入 Pandas 库并使用别名 pd

# 创建一个 Series 对象
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])

# 通过索引取值
value = s['b']
print(value)  # 2

# 通过切片取值
slice_values = s['a':'c']
print(slice_values)
# a    1
# b    2
# c    3
# dtype: int64

# 取第二行
row_value = s.iloc[1]
print(row_value)  # 2

2、DataFrame

  • 基本属性

values:返回底层的 NumPy 数组,包含 DataFrame 中的数据。

columns:返回列名,表示 DataFrame 中每列的标签。

index:返回索引对象,提供标签信息,用于标识每行数据。

shape:返回数据的形状,是一个元组,表示DataFrame的行数和列数。

dtypes:返回每列的数据类型,表示 DataFrame 中存储的元素类型。

size:返回数据的元素个数,表示 DataFrame 中包含的数据点的总数量。

import pandas as pd  # 导入 Pandas 库并使用别名 pd

# 创建一个 DataFrame 对象
data = {'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)

print(df.columns)  # Index(['name', 'Age'], dtype='object')

print(df.index)  # RangeIndex(start=0, stop=3, step=1)

print(df.values)
# [['Tom' 20]
#  ['Nick' 21]
#  ['John' 19]]

print(df.shape)  # (3, 2)

print(df.dtypes)
# name    object
# Age      int64
# dtype: object

print(df.size)  # 6
  • 创建
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np

# 创建一个字典
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18]}
# 从字典创建 DataFrame
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18

# 创建一个列表
data = [['Tom', 20], ['Nick', 21], ['John', 19], ['Tom', 18]]
# 从列表创建 DataFrame,指定列为'name'和'Age'
df = pd.DataFrame(data, columns=['name', 'Age'])
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18

# 创建一个二维数组
data = np.array([['Tom', 20], ['Nick', 21], ['John', 19], ['Tom', 18]])
# 从二维数组创建 DataFrame,指定列为'name'和'Age'
df = pd.DataFrame(data, columns=['name', 'Age'])
print(df)
#    name Age
# 0   Tom  20
# 1  Nick  21
# 2  John  19
# 3   Tom  18

# 创建一个 DataFrame,然后使用该 DataFrame 创建另一个 DataFrame
df1 = pd.DataFrame({'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]})
df2 = pd.DataFrame(df1['name'], columns=['name'])  # 使用 df1 的一个列创建新的 DataFrame
print(df2)
#    name
# 0   Tom
# 1  Nick
# 2  John

# 添加一行
new_row = {'name': 'Alex', 'Age': 22}
# 使用 concat 方法将新行添加到 DataFrame,ignore_index=True 用于重置索引
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
print(df)
#    name Age
# 0   Tom  20
# 1  Nick  21
# 2  John  19
# 3   Tom  18
# 4  Alex  22
  • 取值
import pandas as pd  # 导入 Pandas 库并使用别名 pd

# 创建一个 DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Peter'],'Age': [20, 21, 19, 18],'Score': [85, 80, 90, 88]}
df = pd.DataFrame(data)

# 通过列标签取值
# 选取单列
print(df['Name'])
# 0      Tom
# 1     Nick
# 2     John
# 3    Peter
# Name: Name, dtype: object

# 选取多列
print(df[['Name', 'Age']])
#     Name  Age
# 0    Tom   20
# 1   Nick   21
# 2   John   19
# 3  Peter   18

# 通过标签索引取值
# 设置行标签并选取行
df.index = ['Student1', 'Student2', 'Student3', 'Student4']
print(df.loc['Student1'])
# Name     Tom
# Age       20
# Score     85
# Name: Student1, dtype: object

# 通过位置取值
# 选取第一行(索引为0)
print(df.iloc[0])
# Name     Tom
# Age       20
# Score     85
# Name: Student1, dtype: object

# 使用布尔索引取值
# 选取年龄大于20的行
print(df[df['Age'] > 20])
#           Name  Age  Score
# Student2  Nick   21     80
  • 修改 index、columns
import pandas as pd  # 导入 Pandas 库并使用别名 pd

data = {'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19

df.index = ['name', 'Age', 'height']
df.columns = ['Name', 'Age']
print(df)
#         Name  Age
# name     Tom   20
# Age     Nick   21
# height  John   19
  • 筛选
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np

# 创建一个字典
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18]}
# 从字典创建 DataFrame
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18

# 根据条件筛选数据
filtered_df = df[df['Age'] > 20]
print(filtered_df)
#    name  Age
# 1  Nick   21