如何从列中删除浮点值-Pandas

时间:2019-09-02 06:05:31

标签: python python-3.x pandas dataframe

我有一个如下所示的数据框

df = pd.DataFrame({
 'subject_id':[1,1,1,1,1,1],
  'val' :[5,6.4,5.4,6,6,6]
 })

看起来如下图

enter image description here

我想从values列中删除val,该列以.[1-9]结尾。基本上,我想保留5.06.0之类的值并删除5.46.4等之类的值

尽管我在下面尝试过,但这并不准确

df['val'] = df['val'].astype(int)
df.drop_duplicates()  # it doesn't give expected output and not accurate.

我希望我的输出如下所示

enter image description here

2 个答案:

答案 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