我有一个DataFrame,如下所示
url1, labela:0.5
url2, labelb:0.4
url3, labelc:0.7
我试图执行以下操作,将标签列拆分为':'并按数值过滤,例如大于0.6。在上面的例子中,使用url1和url2过滤掉行,因为值分别为0.5和0.4。
我做了以下但是这不起作用:
df = df[df["labels"].str.split(':').get(1).astype('float') >= 0.6]
我想发生的事情是get(1)
会在分割后给我第二行而不是我想象中的第二列。我也尝试了一些这方面的变化,但没有奏效。我希望这可以说明我的想法。这样做会有什么优雅的方式?
感谢。
答案 0 :(得分:3)
您可以使用df.str.split(..., expand=True)
,然后使用df.astype
和boolean indexing
进行类型转换:
In [782]: df[df['labels'].str.split(':', expand=True)[1].astype(float) >= 0.6]
Out[782]:
url labels
2 url3 labelc:0.7
答案 1 :(得分:2)
关于类似方法的很长的方式......
numpy
有一个字符串操作模块np.core.defchararray
,我们在字符串访问器pd.Series.str
下找到了许多相同的函数
除了我的想象之外,我选择使用rsplit
除了我想象的可能有多个':'
并且只想分开最后一个之后没有其他正当理由。
splits = np.core.defchararray.rsplit(df['labels'].values.astype(str), ':', 1)
df[np.array([x[1] for x in splits], dtype=float) >= .6]
urls labels
2 url3 labelc:0.7