如何将pandas列从dtype对象转换为float,并将错误转换为nans?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (496)

考虑以下情况:

In [2]: a = pd.Series([1,2,3,4,'.'])

In [3]: a
Out[3]: 
0    1
1    2
2    3
3    4
4    .
dtype: object

In [8]: a.astype('float64', raise_on_error = False)
Out[8]: 
0    1
1    2
2    3
3    4
4    .
dtype: object

我本来期望一个允许转换的选项,同时将错误的值(例如那个.)转换为NaN。有没有办法做到这一点?

提问于
用户回答回答于
In [30]: pd.Series([1,2,3,4,'.']).convert_objects(convert_numeric=True)
Out[30]: 
0     1
1     2
2     3
3     4
4   NaN
dtype: float64
用户回答回答于

设置

s = pd.Series(['1','2','3','4','.'])

若要将系列转换为数字,请使用pd.to_numeric

pd.to_numeric(s, errors='coerce')

0    1.0
1    2.0
2    3.0
3    4.0
4    NaN
dtype: float64

如果你需要NaN,使用pd.Series.fillna

pd.to_numeric(s, errors='coerce').fillna(0, downcast='infer')

0    1
1    2
2    3
3    4
4    0
dtype: float64

pd.DataFrame

如果有人对如何将其扩展到数据处理系统感兴趣,请看下面的方法-

df = pd.DataFrame({'A' : np.random.choice(10, 10), 
                   'B' : ['1', '2', '3', '4', '###', '...', 50, '234', '34', '23'], 
                   'C' : np.random.choice(10, 10), 
                   'D' : ['23', '1', '...', '268', '34', '21', '$$', '34', '4567', '0']})
df

   A    B  C     D
0  2    1  2    23
1  9    2  0     1
2  2    3  4   ...
3  9    4  9   268
4  0  ###  3    34
5  8  ...  6    21
6  5   50  2    $$
7  3  234  4    34
8  4   34  9  4567
9  8   23  0     0

df.dtypes

A     int64
B    object
C     int64
D    object
dtype: object

如果不知道哪些列不是数值列,则查询dtypes

df.dtypes.eq(object)

A    False
B     True
C    False
D     True
dtype: bool

cols = df.columns[df.dtypes.eq(object)]
cols
Index(['B', 'D'], dtype='object')

现在,使用掩码过滤列和applypd.to_numeric

df[cols] = df[cols].apply(pd.to_numeric, errors='coerce', axis=0)

或者

for c in cols:
    df[c] = pd.to_numeric(df[c], errors='coerce')

df

   A      B  C       D
0  2    1.0  2    23.0
1  9    2.0  0     1.0
2  2    3.0  4     NaN
3  9    4.0  9   268.0
4  0    NaN  3    34.0
5  8    NaN  6    21.0
6  5   50.0  2     NaN
7  3  234.0  4    34.0
8  4   34.0  9  4567.0
9  8   23.0  0     0.0

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券