猿问

从列中的字符串中提取一组 n 个数字

我在 Pandas 数据框中有一列字符串,其中包含以下内容:"AU/4347001"但此外还有其他组织较少的字符串,例如"Who would have thought this would be so 4347009 difficult"

因此,最终,对于这些数字系列将出现在字符串中的位置和方式,没有一致的模式。它们可能在开头、中间或结尾,并且无法确切知道数字周围有多少其他字符。

理想情况下,我想返回另一列仅包含数字的等长列。

这可能吗?

任何帮助是极大的赞赏!


SMILET
浏览 171回答 3
3回答

慕雪6442864

你可以这样做extract:df =pd.DataFrame({'text':["Who would have thought this would be so 4347009 difficult",                          "24 is me"]})df['new_col'] = df['text'].str.extract(r'(\d+)')    text                                                new_col0   Who would have thought this would be so 434700...   43470091   24 is me    

人到中年有点甜

您可以将提取与数字的捕获组一起使用(\d+):import pandas as pddata = ["AU/4347001",        "Who would have thought this would be so 4347009 difficult",        "Another with a no numbers",        "131242143"]df = pd.DataFrame(data=data, columns=['txt'])result = df.assign(res=df.txt.str.extract('(\d+)')).fillna('')print(result)输出                                                 txt        res0                                         AU/4347001    43470011  Who would have thought this would be so 434700...    43470092                          Another with a no numbers           3                                          131242143  131242143注意,在上面的例子中,使用fillna来填充那些没有找到数字组的列,在这种情况下,用空字符串填充。

湖上湖

这是我们的测试 DataFrame:### Create an example Pandas Dataframedf = pd.DataFrame(data=['something123', 'some456thing', '789somthing',                         'Lots of numbers 82849585 make a long sentence'], columns = ['strings'])### Create a function for identifying, joining and then turning the string to an integerdef get_numbers(string):    return int(''.join([s for s in string if s.isdigit()]))### Now lets apply the get_numbers function to the strings columndf.loc[:,'strings_wo_numbers'] = df.loc[:,'strings']apply(get_numbers)注意:这将连接字符串中的所有数字,即“10 个橄榄和 5 个苹果”将变成 105 而不是 10、5。
随时随地看视频慕课网APP

相关分类

Python
我要回答