我有一个如下所示的数据框
df = pd.DataFrame({
'subject_id':[1,1,1,1,1,1],
'val' :[5,6.4,5.4,6,6,6]
})
看起来如下图
我想从values
列中删除val
,该列以.[1-9]
结尾。基本上,我想保留5.0
,6.0
之类的值并删除5.4
,6.4
等之类的值
尽管我在下面尝试过,但这并不准确
df['val'] = df['val'].astype(int)
df.drop_duplicates() # it doesn't give expected output and not accurate.
我希望我的输出如下所示
答案 0 :(得分:4)
第一个想法是将原始值与转换后的列比较为整数,还为预期的输出(列中的整数)分配整数:
s = df['val']
df['val'] = df['val'].astype(int)
df = df[df['val'] == s]
print (df)
subject_id val
0 1 5
3 1 6
4 1 6
5 1 6
另一个想法是测试is_integer
:
mask = df['val'].apply(lambda x: x.is_integer())
df['val'] = df['val'].astype(int)
df = df[mask]
print (df)
subject_id val
0 1 5
3 1 6
4 1 6
5 1 6
如果需要在输出中浮动,则可以使用:
df1 = df[ df['val'].astype(int) == df['val']]
print (df1)
subject_id val
0 1 5.0
3 1 6.0
4 1 6.0
5 1 6.0
答案 1 :(得分:4)
使用mod 1确定残差。如果residual为0,则表示数字为int。然后将结果用作掩码以仅选择那些行。
df.loc[df.val.mod(1).eq(0)].astype(int)
subject_id val
0 1 5
3 1 6
4 1 6
5 1 6