根据 Python 中的一个标准提取字符串数据框中的数字

Posted

技术标签:

【中文标题】根据 Python 中的一个标准提取字符串数据框中的数字【英文标题】:Extract the numbers in a dataframe of strings based on one criteria in Python 【发布时间】:2019-07-25 11:46:52 【问题描述】:

我想提取符号-> 之前的所有数字。目前我只有这个:

df['New'] = df['Companies'].str.findall(r'(\d+(?:\.\d+)?)').str[-1]

只提取最后一个->之前的数字

我稍微修改了一下:

df['New'] = df['Companies'].str.findall(r'(\d+(?:\.\d+)?)')

但我没有得到我想要的,而是我想要类似的东西:

       Companies                                        New   New2   New3
0   -> Company A 100->Company B 60->Company C 80->...   100   60     80
1   -> Company A 100->Company B 53.1->Company C 82...   100   53.1   82
2   -> Company A 100->Company B 23-> Company D          100   23
3   -> Company 1 100->Company B 30-> Company D          100   30

请注意,New's 可以超过 3 列,具体取决于字符串中有多少 ->。此外,一些Company 名称中包含整数,我不想将其包含在新列中。

你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

Series.unstackDataFrame.add_prefix 中使用Series.str.extractall,在-> 之前使用floats:

pat = r'(\d*\.\d+|\d+\.?)->'
df = df.join(df['Companies'].str.extractall(pat)[0].unstack().add_prefix('New'))

print (df)
                                           Companies New0  New1 New2
0   -> Company A 100->Company B 60->Company C 80->    100    60   80
1   -> Company A 100->Company B 53.1->Company C 82    100  53.1  NaN
2   -> Company A 100->Company B 23-> Company D   ...  100    23  NaN
3         -> Company 1 100->Company B 30-> Company D  100    30  NaN

如果需要浮动:

df = df.join(df['Companies'].str.extractall(pat)[0].astype(float).unstack().add_prefix('New'))
print (df)
                                           Companies   New0  New1  New2
0   -> Company A 100->Company B 60->Company C 80->    100.0  60.0  80.0
1   -> Company A 100->Company B 53.1->Company C 82    100.0  53.1   NaN
2   -> Company A 100->Company B 23-> Company D   ...  100.0  23.0   NaN
3         -> Company 1 100->Company B 30-> Company D  100.0  30.0   NaN

【讨论】:

以上是关于根据 Python 中的一个标准提取字符串数据框中的数字的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.x - 从数据框中提取字符串[重复]

Python spark从数据框中提取字符

如何根据日期时间约束从另一个数据框中提取行?

如何根据在熊猫数据框中的其他列上应用条件来提取列值

Python如何在pandas数据框中提取[]括号内的指定字符串并创建一个具有布尔值的新列

什么函数允许我根据R中列中的值从数据框中的列中提取数据?