使用Python删除包含数字和字符串的数据帧中的小数点

使用Python删除包含数字和字符串的数据帧中的小数点,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大约50000条记录的数据框;我注意到“.0”已添加到列中所有数字的后面。我一直试图删除“.0”,以便下表 N | Movies 1 | Save the Last Dance 2 | Love and Other Drugs 3 | Dance with Me 4 | Love Actually 5 | High School Musical 6 | 2012.0 <----- 7 | Iron M

我有一个大约50000条记录的数据框;我注意到“.0”已添加到列中所有数字的后面。我一直试图删除“.0”,以便下表

N  | Movies              
1  | Save the Last Dance 
2  | Love and Other Drugs
3  | Dance with Me      
4  | Love Actually       
5  | High School Musical
6  | 2012.0      <-----
7  | Iron Man     
8  | 300.0       <-----
9  | Inception      
10 | 360.0       <-----
11 | Pulp Fiction
N |电影
1 |保存最后一支舞
2 |爱情和其他毒品
3 |和我跳舞
4 |其实是爱
5 |高中音乐剧
6 | 2012.0这里是给你的提示

如果是有效数字

a="2012.0"
try:
    a=float(a)
    a=int(a)
    print a

except:
    print a
输出:

2012
Dance with Me
以防像“和我跳舞”这样的弦乐

输出:

2012
Dance with Me

使用函数并应用于整个列:

In [94]:

df = pd.DataFrame({'Movies':['Save the last dance', '2012.0']})
df
Out[94]:
                Movies
0  Save the last dance
1               2012.0

[2 rows x 1 columns]

In [95]:

def trim_fraction(text):
    if '.0' in text:
        return text[:text.rfind('.0')]
    return text

df.Movies = df.Movies.apply(trim_fraction)

In [96]:

df
Out[96]:
                Movies
0  Save the last dance
1                 2012

[2 rows x 1 columns]

你好,羽翼未丰,非常感谢您的回复。这方面的挑战是,我在数据帧中有大约50000条记录。还有,当我试图用这个方法来处理列中的所有记录时;movies_v2=int(movies[[“N”,“movies”]])我得到错误:TypeError:int()参数必须是字符串或数字,而不是“DataFrame”。我正在寻找一种方法来搜索整个记录并将“.0”替换为空(“”)。因此,列中的任何值(例如456.0)都将更改为456。谢谢。当你说数字的时候,你知道这个数字实际上是一个字符串还是一个浮点数吗?如果它是一个字符串,那么我的答案就行了,否则它可能只是一个显示问题,因为即使存储了一个浮点,它也会输出到任何输出格式设置。你能在读取数据的地方张贴行吗?(例如,
pd.read\u table/pd.read\u csv
或类似内容)@Ian您现在应该有足够的代表向上投票;)@EdChum很抱歉看到这个。仍然在搞清楚stackoverflow。upvote是指响应旁边的向上箭头,对吗?
float(“钢铁侠”)回溯(最近一次调用):File“”,第1行,在ValueError中:无法将字符串转换为float:Iron Man
是否可以
。一次将(trim_分数)
应用于多个列?@As3adTintin是类似于
df[list_cols]。应用(微调分数)
将有效。感谢您的响应。这似乎对我不起作用,我一定是做错了。您的建议大致如下:
df['a'、'b'、'c']=df['a'、'b'、'c'].应用(修剪分数)
?是吗?@As3adTintin否您需要传递一个真正的列表:
df[['a','b','c']]=df[[a','b','c']]。应用(修剪分数)
注意双方括号您尝试传递的是一个带3的元组elements@As3adTintin您将需要发布真实的代码,因为这取决于它,考虑这样做将更容易做
df[['A','B','C']]=df[['A','B','C']].apply(lambda x:x.str.replace('.0','')
如果使用较新版本的pandas
In [94]:

df = pd.DataFrame({'Movies':['Save the last dance', '2012.0']})
df
Out[94]:
                Movies
0  Save the last dance
1               2012.0

[2 rows x 1 columns]

In [95]:

def trim_fraction(text):
    if '.0' in text:
        return text[:text.rfind('.0')]
    return text

df.Movies = df.Movies.apply(trim_fraction)

In [96]:

df
Out[96]:
                Movies
0  Save the last dance
1                 2012

[2 rows x 1 columns]