Получение значения int из строкового значения столбца в кадре данных - PullRequest
0 голосов
/ 06 августа 2020

Как извлечь только целое значение из строки значений, состоящей из целых чисел, фигурных скобок, символов. Пример: - У меня проблема с этим -> 946.73 [1] (июнь 2020 г.). Я хочу удалить [1] (июнь 2020 г.) из этой строки или извлечь 946,73 из этой строки. Я использовал метод фильтрации, мобильный - это фрейм данных, а общее количество подписчиков - это столбец, и этот столбец состоит из таких значений, как 946,73 [1] (июнь 2020 г.). поэтому мне нужно получить только целочисленное значение из значений этого столбца. я пробовал этот метод.

mobile ['Total Subscribers'] = int (filter (str.isdi git, mobile ['Total Subscribers']))

url="https://en.wikipedia.org/wiki/List_of_mobile_network_operators"
mobile=pd.read_html(url,match="Company")
mobile=mobile[0]
mobile=mobile.set_index('Rank').rename(columns={'Totalsubscriptions(in 
millions)':'Total Subscribers','Ownership(100% ownership unless stated 
otherwise)':'Ownership'})
mobile['Total Subscribers']=mobile['Total Subscribers'].apply(lambda x: 
re.search(r'\d+', x).group())
mobile['Total Subscribers']
for i in mobile['Total Subscribers']:
    a=re.sub("[^\d\.]", "", i)
    mobile['Total Subscribers']=a
    return mobile['Total Subscribers']

Это мой код. пожалуйста, решите

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

попробуйте замену регулярного выражения, которая будет нацелена на квадратные скобки, круглые скобки и их содержимое.

\[.*\]\(.*\)

т.е.

df = pd.DataFrame({'data' : ['946.73 [1](June 2020)']})

print(df)

                    data
0  946.73 [1](June 2020)

 df['data'].replace(r'\[.*\]\(.*\)','',regex=True)

0    946.73
Name: data, dtype: object

edit - изменено требование.

mobile['Total Subscribers'].str.extract(r'(\d+.\d+)')[0]


Rank
1.0     946.73
2.0     420.00
3.0     398.30
4.0     343.47
5.0     309.52
6.0     279.80
7.0     277.50
8.0     261.46
9.0     261.34
10.0    256.20
11.0    207.96
12.0    204.60
13.0    182.42
14.0    185.50
15.0    171.41
16.0    162.57
17.0    146.10
18.0    145.84
19.0    123.22
20.0    119.87
21.0    118.32
22.0     110.0
23.0     98.49
24.0     89.32
25.0     86.40
26.0     79.67
27.0     75.10
28.0     73.08
29.0      54.5
30.0     52.42
NaN        NaN
0 голосов
/ 06 августа 2020

Если ваше значение, которое нужно извлечь, всегда является плавающей точкой, вы можете использовать простое регулярное выражение , которое соответствует только этому:

import re
text="946.73 [1](June 2020)"
matches = re.findall("\d+\.\d+", text)

if len(matches) == 1:    
   print(matches[0])
else:
   raise ValueError 
0 голосов
/ 06 августа 2020

Ваши вопросы меня немного сбивают с толку, если вы говорите, что вам нужны все числовые c значения из строки, а затем ваше регулярное выражение или любая другая функция is.di git с возвратом 1 и 2020. Например, если я напишу регулярное выражение, которое будет хранить все значения numeri c и обрабатывать float, тогда результат будет примерно таким:

    import re
a=re.sub("[^\d\.]", "", "946.73 [1](June 2020)")

Выход: 946.7312020

Или, что вы можете сделать, это преобразовать все это в фрейм данных и попытаться подтвердить все круглые скобки и также заменить их. Для этого вам нужно будет использовать функцию .replace, пожалуйста, прочтите документацию для большей ясности.

Я думаю, это должно сработать для вас

.replace(r'\[.*\]\(.*\)','',regex=True)

вы можете установить regex = False, если вам нужно используйте его как переключатель.

.replace(r'\[.*\]\(.*\)','',regex=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...