使用Python删除包含数字和字符串的数据帧中的小数点
我有一个大约50000条记录的数据框;我注意到“.0”已添加到列中所有数字的后面。我一直试图删除“.0”,以便下表使用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
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]