了解 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