如何从数据框列中删除拖尾字母

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,然后将NaNs 替换为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+)'

以上是关于如何从数据框列中删除拖尾字母的主要内容,如果未能解决你的问题,请参考以下文章

如何从 pyspark 数据框列中的列表中删除特定字符串

如何使用模块 re 从数据框列中删除特殊字符? [复制]

如何从连接的数据框列中替换 NaN?

删除数据框列中的非字母str

将数据框列中每个单词的首字母大写

如何删除数据框列中的空格并向其添加字符串“NA”?