根据 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.unstack
和DataFrame.add_prefix
中使用Series.str.extractall
,在->
之前使用float
s:
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 中的一个标准提取字符串数据框中的数字的主要内容,如果未能解决你的问题,请参考以下文章