Pandas Series和向量的区别
Pandas是一个广泛应用的开源Python库,提供了广泛的功能,使数据分析更加有效。Pandas包主要用于预处理数据活动,包括清洗、转换和操作数据。因此,它是分析员和数据科学家的非常有用的工具。本文讨论了Pandas中最流行的两种数据结构——Series和DataFrame,以及Series和向量的比较。
Python Pandas Series
在Python Pandas库中,Series是一个一维的带标签的数组,可以包含任何数据类型。它类似于电子表格中的一列或R中的数据框。通过将值的列表传递给pd.Series()函数来创建一个Series,并且可以使用索引或标签来访问它。
标签必须是可哈希的类型,但不需要是唯一的。该对象具有许多用于处理索引的方法,并支持基于整数和标签的索引。
它具有以下参数 −
- Data − 任何列表、字典或标量值都可以用作数据。
-
index − 索引的值应该是唯一的且可哈希的。它的大小必须与数据相同。如果没有提供索引,默认情况下将使用np.arrange(n)。
-
Dtype − 它指的是Series的数据类型。
-
copy − 它用于复制数据。
创建一个Series
我们可以通过四种方法创建一个Series −
使用Pandas库中的pd.Series函数
import pandas as pd
import numpy as np
# Create a series from a list
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
输出
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
这将创建一个Pandas Series,其中包含值1、3、5、NaN、6、8。
从NumPy数组直接创建Series
import numpy as np
import pandas as pd
# Create a NumPy array
data = np.array([1, 3, 5, np.nan, 6, 8])
# Create a series from the array
s = pd.Series(data)
print(s)
输出
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
这两种方法都会创建一个Pandas序列,其索引是从0开始的一系列整数。您还可以在创建序列时指定自己的索引值。
使用标量值创建序列
使用标量值创建序列是我们今天要研究的最后一种方法。在这种情况下,您可以提供一个单个值的数据,并在整个索引期间将其重复。
示例
import pandas as pd
if __name__ == '__main__':
series = pd.Series(data=3.,
index=['a', 'b', 'c', 'd'],
name='series_from_scalar')
print(series)
输出
a 3.0
b 3.0
c 3.0
d 3.0
Name: series_from_scalar, dtype: float64
从ndarray创建Series
NumPy的random.randint()函数可以创建一个填充有随机数字的ndarray,它是创建Series的最简单方法之一。
示例
import numpy as np
import pandas as pd
if __name__ == '__main__':
data = np.random.randint(0, 10, 5)
series = pd.Series(data=data,
index=['a', 'b', 'c', 'd', 'e'],
name='series_from_ndarray')
print(series)
输出
a 5
b 7
c 0
d 8
e 5
Name: series_from_ndarray, dtype: int64
数据帧
另一方面,向量是一个一维的数字值数组。在Pandas中,向量可以表示为具有单个数据类型(例如整数、浮点数或对象)的系列。向量通常用于数学和统计操作,并可使用pd.to_numeric()函数或从数据帧中选择单个列来创建。
使用pd,您可以从多个数据源(包括字典、2D NumPy数组和系列)生成数据帧。 使用Pandas系列字典创建Pandas数据帧
索引的长度必须与系列相同。如果未指定索引,将自动创建一个索引,其值为:[0,…,len(data) – 1]。
#Creating a DataFrame from a dictionary of Series
import pandas as pd
data = pd.DataFrame({
"Class 1": pd.Series([22, 33, 38], index=["math avg", "science avg", "english avg"]),
"Class 2": pd.Series([45, 28, 36], index=["math avg", "science avg", "english avg"]),
"Class 3": pd.Series([32, 41, 47], index=["math avg", "science avg", "english avg"])
})
print(data)
输出
Class 1 Class 2 Class 3
math avg 22 45 32
science avg 33 28 41
english avg 38 36 47
以下是Python Pandas中序列和数据帧之间差异的结论。 | DataFrame | Series |
---|---|---|
数据结构 | 2D表格 | 1D数组 |
可包含异构数据 | 是 | 是 |
可包含列标签 | 是 | 否 |
可包含行标签 | 是 | 否 |
可通过列或行标签索引 | 是 | 是 |
可通过列或行标签切片 | 是 | 是 |
支持算术运算 | 是 | 是 |
支持算术运算 | 是 | 是 |
结论
总之,在Python Pandas中,序列和向量的主要区别是−
- Series可以保存任何数据类型,而向量只能保存数值
-
Series有一个标签索引,而向量没有
-
Series可以使用标签或索引访问,而向量只能使用索引访问
理解序列和向量之间的差异可以帮助您选择合适的数据结构来处理和分析Pandas中的数据。