pandas是含有使数据分析工作变得更快更简单的高级数据结构和操作工具。pandas是基于NumPy构建的,让以NumPy为中心的应用变得更加简单。
导入pandas
from pandas import Series, DataFrame
import pandas as pd
# 导入 Series 和 DataFrame,可以直接使用 Series() 和 DataFrame() 函数来创建 Series 和
# DataFrame 对象了,而无需在代码中使用 pd. 前缀。
from pandas import Series, DataFrame
import pandas as pd
Pandas主要有两种数据结构:Series和DataFrame
一 、Series:
1.1 创建
= pd.Series([, , ,])
Series是一维标记数组,类似于Python中的列表或数组。它由一组数据和一组与之相关的索引(标签)组成。
import numpy as np
import pandas as pd
# 创建Series
obj = pd.Series([1, 2, 3, 4, 5])
输出:
goCopy code
0 1
1 2
2 3
3 4
4 5
dtype: int64
1.2 索引
1.2.1 介绍
- Series的字符串表现形式为:索引在左边,值在右边。由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。
- 访问:可以通过Series的values和index属性获取其数组表示形式和索引对象:
- obj.index , obj.values
# 访问 Series 的值
values = obj.values
print("Series 的值:", values)
# 访问 Series 的索引
index = obj.index
print("Series 的索引:", index)
输出
Series 的值: [1 2 3 4 5]
Series 的索引: RangeIndex(start=0, stop=5, step=1)
1.2.2 显示索引(自定义索引)
定义:希望所创建的Series带有一个可以对各个数据点进行标记的索引:
pd.Series(data, index=index)
pd.Series([, , ,], index=[, , ,])
import pandas as pd
# 创建数据
data = [10, 20, 30, 40, 50]
index = ['A', 'B', 'C', 'D', 'E']
# 创建Series
series_custom_index = pd.Series(data, index=index)
# 或者写
#series_custom_index = pd.Series([10, 20, 30, 40, 50], index=['A', 'B', 'C', 'D', 'E'])
输出将是:
A 10
B 20
C 30
D 40
E 50
dtype: int64
访问 :与普通的NumPy数组相比,Series中的单个或一组值可以通过索引的方式选取。
obj2['a'] 、obj2[['c', 'a', 'd']]
修改:obj2['d'] = 6
obj2['a']
# 输出: -5
obj2['d'] = 6
obj2[['c', 'a', 'd']]
# 输出:
# c 3
# a -5
# d 6
# dtype: int64
1.3 数组运算
在 Pandas 中,Series 对象的数组运算通常会保留索引和值之间的链接。这意味着,对 Series 进行过滤、标量乘法、应用数学函数等操作后,Series 的索引与值之间的对应关系仍然保持不变。
1.3.1 加、减、乘、除 (元素间)
import pandas as pd
# 创建两个Series对象
s1 = pd.Series([1, 2, 3, 4])
s2 = pd.Series([5, 6, 7, 8])
# 加法
result_add = s1 + s2
print("加法结果:")
print(result_add)
# 输出:
# 0 6
# 1 8
# 2 10
# 3 12
# dtype: int64
# 减法
result_sub = s1 - s2
print("\n减法结果:")
print(result_sub)
# 输出:
# 0 -4
# 1 -4
# 2 -4
# 3 -4
# dtype: int64
# 乘法
result_mul = s1 * s2
print("\n乘法结果:")
print(result_mul)
# 输出:
# 0 5
# 1 12
# 2 21
# 3 32
# dtype: int64
# 除法
result_div = s1 / s2
print("\n除法结果:")
print(result_div)
# 输出:
# 0 0.200000
# 1 0.333333
# 2 0.428571
# 3 0.500000
# dtype: float64
# 平方根
result_sqrt = s1.apply(lambda x: x ** 0.5)
print("\n平方根结果:")
print(result_sqrt)
# 输出:
# 0 1.000000
# 1 1.414214
# 2 1.732051
# 3 2.000000
# dtype: float64
1.3.2 应用数学函数
写法1: = np.log(s)
写法2: = s.apply(np.log)
# 1.应用数学函数
result_sqrt = s.apply(np.sqrt) # 平方根
result_exp = s.apply(np.exp) # 指数函数
result_log = s.apply(np.log) # 自然对数
result_sin = s.apply(np.sin) # 正弦函数
# 2. 应用数学函数
result_sqrt = np.sqrt(s) # 平方根
result_exp = np.exp(s) # 指数函数
result_log = np.log(s) # 自然对数
result_sin = np.sin(s) # 正弦函数
1.3.3 布尔型数组进行过滤
s[s > 2]
import pandas as pd
# 创建一个 Series 对象
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print("原始 Series 对象:\n", s)
# 创建一个布尔型数组,用于过滤
mask = s > 2
print("布尔型数组:\n", mask)
'''
布尔型数组:
a False
b False
c True
d True
e True
dtype: bool
'''
# 根据布尔型数组进行过滤
filtered_s = s[mask]
print("过滤后的 Series 对象:\n", filtered_s)
'''
过滤后的 Series 对象:
c 3
d 4
e 5
dtype: int64
'''
布尔型数组 mask
用于过滤 Series 对象 s
中大于 2 的元素。
Series
对象可以看作是一个定长的有序字典,因为它将索引值映射到数据值。因此,你可以使用类似于字典的方式来操作 Seri