在单个数据框列

时间:2016-01-08 20:20:06

标签: python pandas dataframe

我有一个数据框,其中一列Value有字符串。其中一些字符串值是数字。我意识到,由于它们在同一列中,因此它们都被视为字符串,但我需要区分实际上是字符串的那些字符串和实际上是数字字符串的字符串。

我想创建另外两个名为Value_NumValue_Txt的列,然后删除原来的Value列。

我运行了一个使用以下命令的脚本:

df['Value_Num'] = df.Value.convert_objects(convert_numeric=true)

完美无缺。但是,在转换到较新版本时,我收到此错误:

  

FutureWarning:不推荐使用convert_objects。使用特定于数据类型的转换器pd.to_datetime,pd.to_timedelta和pd.to_numeric。

我无法弄清楚如何使用pd.to_numeric函数重写命令。

感谢。

1 个答案:

答案 0 :(得分:1)

要避免FutureWarning发出的convert_objects,您可以使用pd.numeric with errors='coerce'

pd.to_numeric(df['Value'], errors='coerce')

这会将非数字字符串设置为NaN - 正是我们想要的Value_Num

然后,我们可以使用pd.notnull标识{@ 1}}中包含非NaN值的行,并将这些行设置为Value_Num列中的NaN。因此,Value列会获取Value列所需的值。将Value_Txt重命名为Value即可完成任务:

Value_Txt

产量

import numpy as np
import pandas as pd
df = pd.DataFrame({'Value':['1', 'foo', '1.23', 'bar', '3.14e6']})
df['Value_Num'] = pd.to_numeric(df['Value'], errors='coerce')
mask = pd.notnull(df['Value_Num'])
df.loc[mask, 'Value'] = np.nan
df = df.rename(columns={'Value':'Value_Txt'})
print(df)