Pandas:如何使用convert_objects替换NaN值的字符串

时间:2014-04-23 00:42:35

标签: pandas dataframe

这与我之前提出的问题相关,在这里:Replace any string in columns with 1

然而,由于很久以前就回答了这个问题,我在这里开始提出一个新问题。我本质上是尝试使用convert_objects将字符串值替换为以下数据帧中的1(在此缩写):

 uniq_epoch     T_Opp     T_Eval
 1              0         0
 1              0         vv.bo
 2              bx        0
 3              0         0
 3              vo.bp     0
 ...

我使用以下代码执行此操作。我实际上尝试在整个数据帧上使用此代码,并将其应用于特定列。结果每次都没有错误消息,但也没有更改数据(没有值转换为NaN,dtype仍然是'O')。

 df = df.convert_objects(convert_numeric = True)

 df.T_Eval = df.T_Eval.convert_objects(convert_numeric=True)

所需的最终输出如下:

 uniq_epoch     T_Opp     T_Eval
 1              0         0
 1              0         1
 2              1         0
 3              0         0
 3              1         0
 ...

在此之前可能还有一个步骤,其中1为NaN,而fillna(1)用于在字符串中插入1s。

我已经在stackoverflow上搜索了帖子,并查看了convert_objects的文档,但不幸的是它很稀疏。如果不是上一篇文章(上面链接),我甚至不会尝试以这种方式应用它。

我还要提到这些列中有相当多的字符串(代码),并且代码可以重新组合,因此使用dict和replace()执行此操作需要大约相同的时间好像我是手工做的。

基于上一篇文章和我能够找到的各种资源,我无法弄清楚为什么这不起作用 - 任何帮助都非常赞赏,包括指向进一步的文档。

1 个答案:

答案 0 :(得分:4)

这是0.13.1

docs herehere

也许你有一个旧版本; IIRC convert_objects在0.11中引入。

In [5]: df = read_csv(StringIO(data),sep='\s+',index_col=0)

In [6]: df
Out[6]: 
            T_Opp T_Eval
uniq_epoch              
1               0      0
1               0  vv.bo
2              bx      0
3               0      0
3           vo.bp      0

[5 rows x 2 columns]

In [7]: df.convert_objects(convert_numeric=True)
Out[7]: 
            T_Opp  T_Eval
uniq_epoch               
1               0       0
1               0     NaN
2             NaN       0
3               0       0
3             NaN       0

[5 rows x 2 columns]

In [8]: df.convert_objects(convert_numeric=True).dtypes
Out[8]: 
T_Opp     float64
T_Eval    float64
dtype: object

In [9]: df.convert_objects(convert_numeric=True).fillna(1)
Out[9]: 
            T_Opp  T_Eval
uniq_epoch               
1               0       0
1               0       1
2               1       0
3               0       0
3               1       0

[5 rows x 2 columns]
相关问题