删除列值类型为字符串Pandas的行

por*_*efs 10 python dataframe pandas

我有一个熊猫数据帧.我的一个列应该只是浮点数.当我尝试将该列转换为浮点数时,我发出警告,其中有字符串.我想删除此列中值为字符串的所有行...

EdC*_*ica 18

convert_objects与param一起使用convert_numeric=True会将任何非数字值强制转换为NaN:

In [24]:

df = pd.DataFrame({'a': [0.1,0.5,'jasdh', 9.0]})
df
Out[24]:
       a
0    0.1
1    0.5
2  jasdh
3      9
In [27]:

df.convert_objects(convert_numeric=True)
Out[27]:
     a
0  0.1
1  0.5
2  NaN
3  9.0
In [29]:
Run Code Online (Sandbox Code Playgroud)

然后你可以删除它们:

df.convert_objects(convert_numeric=True).dropna()
Out[29]:
     a
0  0.1
1  0.5
3  9.0
Run Code Online (Sandbox Code Playgroud)

UPDATE

从版本开始,0.17.0这个方法现在弃用,你不得不使用to_numericSeries而不是整个df,因此等效代码现在是:

df.apply(lambda x: pd.to_numeric(x, errors='coerce')).dropna()
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

我的一列应该只是浮点数。我想删除此列中值为字符串的所有行

您可以通过将系列转换为数字pd.to_numeric,然后使用pd.Series.notnull. float需要将转换为单独的步骤,以避免您的系列恢复为objectdtype。

# Data from @EdChum

df = pd.DataFrame({'a': [0.1, 0.5, 'jasdh', 9.0]})

res = df[pd.to_numeric(df['a'], errors='coerce').notnull()]
res['a'] = res['a'].astype(float)

print(res)

     a
0  0.1
1  0.5
3  9.0
Run Code Online (Sandbox Code Playgroud)