Pandas 熊猫:如何使用convert_对象用NaN值替换字符串

Pandas 熊猫:如何使用convert_对象用NaN值替换字符串,pandas,dataframe,Pandas,Dataframe,这与我之前提出的一个问题有关,这里: 然而,由于这个问题很久以前就得到了回答,我在这里开始了一个新的问题。我实际上是在尝试使用convert_对象在以下数据帧(此处缩写)中将字符串值替换为1: 我正在使用以下代码来完成此操作。实际上,我已经尝试在整个数据帧上使用此代码,并将其应用于特定列。每次的结果都是没有错误消息,但数据也没有更改(没有值转换为NaN,数据类型仍然是“O”) 或 期望的最终输出如下: uniq_epoch T_Opp T_Eval 1

这与我之前提出的一个问题有关,这里:

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

我正在使用以下代码来完成此操作。实际上,我已经尝试在整个数据帧上使用此代码,并将其应用于特定列。每次的结果都是没有错误消息,但数据也没有更改(没有值转换为NaN,数据类型仍然是“O”)

期望的最终输出如下:

 uniq_epoch     T_Opp     T_Eval
 1              0         0
 1              0         1
 2              1         0
 3              0         0
 3              1         0
 ...
在此之前可能还有一个步骤,其中1s为NaN,fillna(1)用于在已插入字符串的位置插入1s

我已经搜索了stackoverflow上的文章,并查看了convert_对象的文档,但不幸的是,它非常稀疏。如果不是上一篇文章(链接在上面),我甚至不知道会尝试这样应用它

我还将提到,这些列中有相当多的字符串(代码),代码可以重新组合,因此使用dict和replace()执行此操作所需的时间与我手动执行此操作所需的时间大致相同

基于上一篇文章和我能找到的各种资源,我不明白为什么这不起作用-非常感谢任何帮助,包括指向进一步的文档。

这是在0.13.1上

文件 及

也许你有一个更老的版本;IIRC
convert_对象
在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]
这是在0.13.1上

文件 及

也许你有一个更老的版本;IIRC
convert_对象
在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]

谢谢你的洞察力!我更新到Pandas 0.13.1,并按预期转换_对象函数。(不幸的是,使用drop_副本会导致代码的其他部分出现问题)。仅供任何人参考。谢谢你的洞察力!我更新到Pandas 0.13.1,并按预期转换_对象函数。(不幸的是,使用drop_副本会导致代码的其他部分出现问题)。这只是一个供任何人参考的帖子。
 uniq_epoch     T_Opp     T_Eval
 1              0         0
 1              0         1
 2              1         0
 3              0         0
 3              1         0
 ...
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]