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

时间:2014-11-06 03:59:21

标签: python pandas dataframe

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

4 个答案:

答案 0 :(得分:14)

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]:

然后你可以删除它们:

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

<强>更新

由于版本0.17.0此方法现在为deprecated,您需要使用to_numeric,但不幸的是,它在Series而不是整个df上运行,因此等效代码现在:

df.apply(lambda x: pd.to_numeric(x, errors='coerce')).dropna()

答案 1 :(得分:0)

您可以从dtype.kind属性中找到列的数据类型。像df[col].dtype.kind这样的东西。有关详细信息,请参阅the numpy docs。将数据帧转置为从索引到列。

答案 2 :(得分:0)

假设您的数据框为df,并且您想确保数据框的某一列中的所有数据在特定的pandas dtype中都是数字的,例如float

df[df.columns[n]] = df[df.columns[n]].apply(pd.to_numeric, errors='coerce').fillna(0).astype(float).dropna()

答案 3 :(得分:0)

  

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

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

# 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