Har*_*han 5 python string dataframe python-2.7 pandas
我有一个包含四列的csv文件。我这样阅读:
df = pd.read_csv('my.csv', error_bad_lines=False, sep='\t', header=None, names=['A', 'B', 'C', 'D'])
Run Code Online (Sandbox Code Playgroud)
现在,字段C包含字符串值。但是在某些行中有非字符串类型(浮点数或数字)值。如何删除那些行?我正在使用Pandas的0.18.1版本。
df = pd.DataFrame([['a', 'b', 'c', 'd'], ['e', 'f', 1.2, 'g']], columns=list('ABCD'))
print df
A B C D
0 a b c d
1 e f 1.2 g
Run Code Online (Sandbox Code Playgroud)
注意,您可以看到什么是单个单元格类型。
print type(df.loc[0, 'C']), type(df.loc[1, 'C'])
<type 'str'> <type 'float'>
Run Code Online (Sandbox Code Playgroud)
面膜和切片
print df.loc[df.C.apply(type) != float]
A B C D
0 a b c d
Run Code Online (Sandbox Code Playgroud)
更一般
print df.loc[df.C.apply(lambda x: not isinstance(x, (float, int)))]
A B C D
0 a b c d
Run Code Online (Sandbox Code Playgroud)
您也可以float尝试确定它是否可以是浮点数。
def try_float(x):
try:
float(x)
return True
except:
return False
print df.loc[~df.C.apply(try_float)]
A B C D
0 a b c d
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,您将排除可解释为浮点数的字符串。
比较我提供的几个选项的时间,以及jezrael使用小型数据帧的解决方案。
对于具有500,000行的数据框:
检查其类型是否为float似乎是最高性能的,其后面是数字。如果您需要检查int和float,我会同意jezrael的回答。如果您可以通过检查浮标来解决问题,请使用该浮标。
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |