了解 pandas 系列的数据类型
Understanding data type of pandas series
我有一个从 DF 切片的 Pandas 系列。该系列有大约 100000 行,其中一些值为 Float 类型,其他值为无穷大。但是 python 将整个系列指定为 'Object' 类型。因此,当我尝试删除非数字值时,整个系列变为 NaN。
下面是 table 结构和所有类型的非数字条目的示例。 °° 这个符号表示无穷大。
时间(微秒)
A 通道 (mV)
通道 B (mV)
通道 C (mV)
ChannelD (mV)
1
0.1
0.2
0.3
0.4
2
0.5
0.7
0.4
0.5
3
0.6
0.2
0.3
0.11
4
0.8
0.6
0.7
0.6
5
°°
°°
°°
°°
为什么python将整个系列指定为对象?
您可以使用 pd.to_numeric
将每列转换为数字,并将 errors
作为 coerce
传递,这会将非数字字符串值转换为 NaN
.
for c in df:
df[c] = pd.to_numeric(df[c], errors='coerce')
输出:
df
Time (µs) ChannelA (mV) ChannelB (mV) ChannelC (mV) ChannelD (mV)
0 1 0.1 0.2 0.3 0.40
1 2 0.5 0.7 0.4 0.50
2 3 0.6 0.2 0.3 0.11
3 4 0.8 0.6 0.7 0.60
4 5 NaN NaN NaN NaN
转换后的数据类型:
>>> df.dtypes:
Time (µs) int64
ChannelA (mV) float64
ChannelB (mV) float64
ChannelC (mV) float64
ChannelD (mV) float64
dtype: object
你也可以把那些°°
字符替换成inf
代表无限值如果你不想使用NaN
,使用replace
,那么你可以将数据帧转换为 float
.
df.replace('°°', float('inf')).astype(float)
Time (µs) ChannelA (mV) ChannelB (mV) ChannelC (mV) ChannelD (mV)
0 1.0 0.1 0.2 0.3 0.40
1 2.0 0.5 0.7 0.4 0.50
2 3.0 0.6 0.2 0.3 0.11
3 4.0 0.8 0.6 0.7 0.60
4 5.0 inf inf inf inf
我有一个从 DF 切片的 Pandas 系列。该系列有大约 100000 行,其中一些值为 Float 类型,其他值为无穷大。但是 python 将整个系列指定为 'Object' 类型。因此,当我尝试删除非数字值时,整个系列变为 NaN。
下面是 table 结构和所有类型的非数字条目的示例。 °° 这个符号表示无穷大。
时间(微秒) | A 通道 (mV) | 通道 B (mV) | 通道 C (mV) | ChannelD (mV) |
---|---|---|---|---|
1 | 0.1 | 0.2 | 0.3 | 0.4 |
2 | 0.5 | 0.7 | 0.4 | 0.5 |
3 | 0.6 | 0.2 | 0.3 | 0.11 |
4 | 0.8 | 0.6 | 0.7 | 0.6 |
5 | °° | °° | °° | °° |
为什么python将整个系列指定为对象?
您可以使用 pd.to_numeric
将每列转换为数字,并将 errors
作为 coerce
传递,这会将非数字字符串值转换为 NaN
.
for c in df:
df[c] = pd.to_numeric(df[c], errors='coerce')
输出:
df
Time (µs) ChannelA (mV) ChannelB (mV) ChannelC (mV) ChannelD (mV)
0 1 0.1 0.2 0.3 0.40
1 2 0.5 0.7 0.4 0.50
2 3 0.6 0.2 0.3 0.11
3 4 0.8 0.6 0.7 0.60
4 5 NaN NaN NaN NaN
转换后的数据类型:
>>> df.dtypes:
Time (µs) int64
ChannelA (mV) float64
ChannelB (mV) float64
ChannelC (mV) float64
ChannelD (mV) float64
dtype: object
你也可以把那些°°
字符替换成inf
代表无限值如果你不想使用NaN
,使用replace
,那么你可以将数据帧转换为 float
.
df.replace('°°', float('inf')).astype(float)
Time (µs) ChannelA (mV) ChannelB (mV) ChannelC (mV) ChannelD (mV)
0 1.0 0.1 0.2 0.3 0.40
1 2.0 0.5 0.7 0.4 0.50
2 3.0 0.6 0.2 0.3 0.11
3 4.0 0.8 0.6 0.7 0.60
4 5.0 inf inf inf inf