Pandas: Series 是同质的吗?
Pandas: Is Series homogenous?
Pandas系列是同质的还是异质的?
import pandas as pd
S=pd.Series([1,2,3,1.5,'US',True,False,'India'])
>>> S
0 1
1 2
2 3
3 1.5
4 US
5 True
6 False
7 India
dtype: object
>>> S[3]
1.5
>>> type(S[5])
<class 'bool'>
根据定义和文档,系列是同质的。
Series 定义为:
One-dimensional ndarray with axis labels (including time series).
ndarray 定义为:
An array object represents a multidimensional, homogeneous array of fixed-size items.
(在两个引号中加粗我的)
dtype object
系列,然而,是棘手的。由于几乎 python 中的所有内容都可以视为 object
,因此此类系列可以引用大量不同类型的变量。因此,虽然 Series 本身是一个 对象引用的同质集合 ,但这些单独的对象在被引用时可能具有异构子类型。
访问系列中的每个单独值将导致暴露其各自的类型,但是,我们仅可以保证系列中的所有元素都是类型object
.
我们最常在处理字符串时或从零散的 DataFrame 中提取行时得到 dtype object
系列。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['x', 'y', 'z'],
'C': [3.4, 5.6, 7.8]
})
s1 = df['B']
s2 = df.iloc[0, :]
s1
(B 列):
0 x
1 y
2 z
Name: B, dtype: object
s2
(第 0 行):
A 1
B x
C 3.4
Name: 0, dtype: object
我们可以看到,pandas无法使用[=33]之类的方法来区分dtype object
的字符串列和包含dtype object
的混合类型的列之间的区别=]:
s1.str.upper()
0 X
1 Y
2 Z
Name: B, dtype: object
s2.str.upper()
A NaN
B X
C NaN
Name: 0, dtype: object
请注意(在 pandas 1.3.5 中)数字(int
和 float
)值已变成 NaN
。这不会引发任何错误或警告。
(这也适用于提供的示例系列)
pd.Series([1, 2, 3, 1.5, 'US', True, False, 'India']).str.upper()
0 NaN
1 NaN
2 NaN
3 NaN
4 US
5 NaN
6 NaN
7 INDIA
dtype: object
同样,这是由于 pandas 将此系列视为对象的同质集合,这允许使用 dtype 受限 .str
方法。
Pandas系列是同质的还是异质的?
import pandas as pd
S=pd.Series([1,2,3,1.5,'US',True,False,'India'])
>>> S
0 1
1 2
2 3
3 1.5
4 US
5 True
6 False
7 India
dtype: object
>>> S[3]
1.5
>>> type(S[5])
<class 'bool'>
根据定义和文档,系列是同质的。
Series 定义为:
One-dimensional ndarray with axis labels (including time series).
ndarray 定义为:
An array object represents a multidimensional, homogeneous array of fixed-size items.
(在两个引号中加粗我的)
dtype object
系列,然而,是棘手的。由于几乎 python 中的所有内容都可以视为 object
,因此此类系列可以引用大量不同类型的变量。因此,虽然 Series 本身是一个 对象引用的同质集合 ,但这些单独的对象在被引用时可能具有异构子类型。
访问系列中的每个单独值将导致暴露其各自的类型,但是,我们仅可以保证系列中的所有元素都是类型object
.
我们最常在处理字符串时或从零散的 DataFrame 中提取行时得到 dtype object
系列。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['x', 'y', 'z'],
'C': [3.4, 5.6, 7.8]
})
s1 = df['B']
s2 = df.iloc[0, :]
s1
(B 列):
0 x
1 y
2 z
Name: B, dtype: object
s2
(第 0 行):
A 1
B x
C 3.4
Name: 0, dtype: object
我们可以看到,pandas无法使用[=33]之类的方法来区分dtype object
的字符串列和包含dtype object
的混合类型的列之间的区别=]:
s1.str.upper()
0 X
1 Y
2 Z
Name: B, dtype: object
s2.str.upper()
A NaN
B X
C NaN
Name: 0, dtype: object
请注意(在 pandas 1.3.5 中)数字(int
和 float
)值已变成 NaN
。这不会引发任何错误或警告。
(这也适用于提供的示例系列)
pd.Series([1, 2, 3, 1.5, 'US', True, False, 'India']).str.upper()
0 NaN
1 NaN
2 NaN
3 NaN
4 US
5 NaN
6 NaN
7 INDIA
dtype: object
同样,这是由于 pandas 将此系列视为对象的同质集合,这允许使用 dtype 受限 .str
方法。