创建Series
pandas.Series(data,index,dtype,copy)
常见参数
data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。无论我们是否为Series对象指定行索引,一个包含整数0到N-1(这里N是数据的长度)的默认索引将被创建,这种索引被称为位置索引
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
常见参数举例
pandas.Series(data, index, dtype, copy)
是一个用于创建 Pandas Series 对象的构造函数。它可以接受多种参数来指定 Series 对象的数据,索引,数据类型和副本选项。
以下是 pandas.Series()
构造函数的参数和示例:
data
Series 数据的输入。可以是列表,NumPy 数组,字典或标量值。例如:
import pandas as pd
# 从列表创建
Series s1 = pd.Series([1, 2, 3, 4])
print(s1)
# 从字典创建
Series s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s2)
输出:
a 1
b 2
c 3
d 4
dtype: int64
10 1
20 2
30 3
40 4
dtype: int64
index
Series 索引的输入。可以是一个标签列表或一个与数据长度相同的数组。例如:
import pandas as pd
# 使用标签列表创建
Series s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']) print(s1)
# 使用数组创建
Series s2 = pd.Series([1, 2, 3, 4], index=[10, 20, 30, 40])
print(s2)
输出:
a 1
b 2
c 3
d 4
dtype: int64
10 1
20 2
30 3
40 4
dtype: int64
dtype
Series 数据类型的输入。可以是 NumPy 类型或 Pandas 类型。例如:
import pandas as pd
# 使用 NumPy 数据类型创建 Series
s1 = pd.Series([1, 2, 3, 4], dtype='float32')
print(s1)
# 使用 Pandas 数据类型创建 Series
s2 = pd.Series([1, 2, 3, 4], dtype=pd.StringDtype())
print(s2)
输出:
0 1.0
1 2.0
2 3.0
3 4.0
dtype: float32
0 1
1 2
2 3
3 4
dtype: string
copy
控制是否复制数据。默认为 False,表示不复制原始数据。如果设置为 True,则会创建一个副本。例如:
import pandas as pd
data = [1, 2, 3, 4]
s1 = pd.Series(data)
s2 = pd.Series(data, copy=True)
data[0] = 100 # 修改原始数据
print(s1)
print(s2)
输出:
0 100
1 2
2 3
3 4
dtype: int64
0 1
1 2
2 3
3 4
dtype: int64
在上述代码中,我们创建了一个包含整数的列表并将其用于创建两个 Series 对象。然后,我们将第一个列表元素更改为 100,以模拟原始数据的更改。由于 copy
参数默认为 False,因此 s1 和 s2 都引用了相同的原始数据。因此,当我们更改原始数据时,两个 Series 都受到影响。如果将 copy
参数设置为 True,则会创建副本,并且这种情况下不会发生这种情况。
series基本操作
以下我们展示几种类似ndarray的操作:
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(4), index=['a', 'b', 'c', 'd'])
print (s)
a 0.989563
b 2.196327
c 0.235339
d 1.296633
dtype: float64
选取数据
- 前2条数据
s[:2]
a 0.989563
b 2.196327
dtype: float64
- 第2,3条数据
s[[1,3]]
b 2.196327
d 1.296633
dtype: float64
- 小于平均值的数据
s[s < s.mean()]
a 0.989563
c 0.235339
dtype: float64
类似字典,Series也可以通过索引值(看作键)来选取元素:
- 索引值为a的数据
s['a']
0.9895629614490722
- 索引值为c,d的数据
s[['c','d']]
c 0.235339
d 1.296633
dtype: float64
'c' in s
True
数学运算
Series可以像ndarray一样进行加减乘除幂等数学运算,数学运算会对所有的数值自动执行,不需要写循环来对其中的每一个值进行相同操作。
- 加法运算
s + 3
a 3.989563
b 5.196327
c 3.235339
d 4.296633
dtype: float64
- 绝对值运算
np.abs(s)
a 0.989563
b 2.196327
c 0.235339
d 1.296633
dtype: float64
在算术运算中会自动对齐不同索引的数据:
s1 = pd.Series([1, 2, 4, 5], index=['a', 'b', 'c', 'd'])
s2 = pd.Series([2, 3, 5, 6], index=['c', 'a', 'b', 'd'])
s1 + s2
a 4
b 7
c 6
d 11
dtype: int64
唯一值
如果想知道Series对象包含多少个不同的元素,可使用unique()
函数。其返回结果为一个数组,包含Series去重后的元素:
s3 = pd.Series(data=['a', 'a', 'c', 'd'])
print (s3)
0 a
1 a
2 c
3 d
dtype: object
s3.unique()
array(['a', 'c', 'd'], dtype=object)
跟unique()
函数相似的另一个函数是values_counts()
,它可以查看每一个唯一元素的频数:
s3.value_counts()
a 2
d 1
c 1
dtype: int64
转换类型
有时我们在做数据处理时,原始数据的数字是字符串的类型,但是我们又要让它做数学运算。
与ndarray类似,astype()
函数可以帮我们解决这个问题:
s4 = pd.Series(data=['1.3', '2.7', '1.4', '2.3'])
print(s4.dtype)
s5 = s4.astype('float32')
print (s5.dtype)
object
float32
Pandas的数据元素包含以下几种类型:
object字符串或混合类型
int整型
float浮点型
datetime时间类型
bool布尔型