regex 如何提取一串混合数字和文本,并得到平均数?

dwbf0jvd  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(72)

我的数据框中有一列包含数字和文本字符串,例如:

0    200 to 500 people
1    1 to 5 people
2    5000 people and over
3    2000 to 3000 people

字符串
我想把这些字符串都转换成一个数字。对于那些有范围的,我们可以考虑范围的平均值,对于那些只包含一个数字的,我们可以提取相同的数字。所以我的结果应该是:

0 350
1 3
2 5000
3 2500


如果你能给予我一点提示,告诉我怎么做,我将不胜感激。我知道如何使用正则表达式来得到数字,但在这里我不知道如何对包含两个数字的行求平均值,同时得到包含一个数字的行的唯一数字。

n3ipq98p

n3ipq98p1#

假定字符串值存储在s列中,

>>> df = pd.DataFrame.from_records([{'s': '200 to 500 people'}, {'s': '1 to 5 people'}, {'s': '5000 people and over'}, {'s': '2000 to 3000 people'}, {"s": "some text"}])
>>> df.head()
                      s
0     200 to 500 people
1         1 to 5 people
2  5000 people and over
3   2000 to 3000 people
4             some text

字符串
然后:

>>> df["values"] = df["s"].str.extractall(r"(\d+)").astype(int).groupby(level=0).mean()
>>> df.head()
                      s  values
0     200 to 500 people   350.0
1         1 to 5 people     3.0
2  5000 people and over  5000.0
3   2000 to 3000 people  2500.0
4             some text     NaN

相关问题