我有一个相当大的pandas数据帧(11k行和20列)。一列有一个混合数据类型,主要是数字(浮点数),其中散布着一些字符串。
在使用混合列中的数据执行某些统计分析之前,我通过查询其他列来对此数据框进行子集化(但如果存在字符串,则无法执行此操作)。 99%的时间一旦将此列子集化为纯数字,但很少有字符串值最终会出现在我需要捕获的子集中。
通过Pandas混合类型列循环检查字符串的最有效/ pythonic方式是什么(或者相反地检查整个列是否充满数值)?
如果列中只有一个字符串,我想引发错误,否则继续。
答案 0 :(得分:2)
这是一种方式。我不确定它是否可以被矢量化。
import pandas as pd
df = pd.DataFrame({'A': [1, None, 'hello', True, 'world', 'mystr', 34.11]})
df['stringy'] = [isinstance(x, str) for x in df.A]
# A stringy
# 0 1 False
# 1 None False
# 2 hello True
# 3 True False
# 4 world True
# 5 mystr True
# 6 34.11 False
答案 1 :(得分:0)
这是另一种方式。它将列A
的值转换为数字,但不会因错误而失败:字符串被替换为NA。 notnull()
可以删除这些NA。
df = df[pd.to_numeric(df.A, errors='coerce').notnull()]
但是,如果该列中已经有NA,它们也会被删除。
另请参阅: Select row from a DataFrame based on the type of the object(i.e. str)