如何从数据框列中删除拖尾字母
Posted
技术标签:
【中文标题】如何从数据框列中删除拖尾字母【英文标题】:How to remove tailing alphabet from dataframe column 【发布时间】:2017-11-25 08:57:48 【问题描述】:我有一个数据框:
A B
10.1 33.3
11.2 44.2s
12.3 11.3s
14.2s *
15.4s nan
我想输出为
A B
10.1 33.3
11.2 44.2
12.3 11.3
14.2 0
15.4 0
如何删除这些拖尾字母 我试过这段代码
1st approch:
bulb_temp_df['A'].str.extract('(\d)').astype(float)
bulb_temp_df['B'].str.extract('(\d)').astype(float)
第二个方法:
bulb_temp_df['A'] =
bulb_temp_df['A'].astype(str)
bulb_temp_df['A'] =
bulb_temp_df['A'].map(lambda x: x.rstrip('aAbBcC'))
这些都不起作用。他们没有从列中删除 tailing 。
【问题讨论】:
我仍然没有找到解决方案尝试这样做bulb_temp_df[cols]=bulb_temp_df[cols].apply(lambda x:x.str.extract('(\d+\.\d+)',expand=False) .astype(float) .fillna(0))
【参考方案1】:
您可以先提取floats,然后将NaN
s 替换为0
添加fillna
。
解决方案在apply
中,用于处理多个列。
cols = ['A','B']
#if mixed values - numeric with strings
bulb_temp_df[cols]=bulb_temp_df[cols].astype(str)
bulb_temp_df[cols]=bulb_temp_df[cols].apply(lambda x:x.str.extract('(\d+\.\d+)',expand=False)
.astype(float)
.fillna(0))
A B
0 10.1 33.3
1 11.2 44.2
2 12.3 11.3
3 14.2 0.0
4 15.4 0.0
【讨论】:
它返回NaN
,所以函数fillna(0)
替换它。谢谢你的接受。您也可以投票 - 单击接受标记上方0
上方的小三角形。谢谢。
抱歉混淆了,它正在从数字中删除“s”,但没有字母的数字却使它们变成了 0。你能纠正一下吗
检查答案,使用bulb_temp_df[cols]=bulb_temp_df[cols].astype(str)
如果我在列中有一些负值,那么它不会考虑这些值这些值消失了。所以尝试了这个'(\-\d+\.\d+)'
,但是在这种情况下它不会考虑正值。我遇到了负值,但它失败了
我觉得你可以用'([-+]?\d*\.\d+|\d+)'
,或者省略+like'([-]?\d*\.\d+|\d+)'
以上是关于如何从数据框列中删除拖尾字母的主要内容,如果未能解决你的问题,请参考以下文章