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