我有一个数据框,其中一列Value
有字符串。其中一些字符串值是数字。我意识到,由于它们在同一列中,因此它们都被视为字符串,但我需要区分实际上是字符串的那些字符串和实际上是数字字符串的字符串。
我想创建另外两个名为Value_Num
和Value_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
函数重写命令。
感谢。
答案 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)