Извлечь строки с помощью «номер строки номер номер» и записать его во фрейм данных - PullRequest
0 голосов
/ 13 января 2020

Мой набор данных выглядит следующим образом (отрывок):

2.000 Company A 8.876 0,02
248 Enterprise B 26.028 0,07
193
dasdasdasd (asasas) sdasdasd
adsadsd asdasd asasa asassaas asas 
asas asas 31. January 2018 (continue)
asdasd – 99,00% (31. March 2017 – 99,98%) (continue)
amasdasd asas
asasas asas
asas asssssssssss
DDD
asdasdads in %
asdasd adasd asddasad 
(continue)
415 Company C Ltd. 21.412 0,06
668 Enterprise D AG 17.332 0,05
1.240 Company E GmbH 31.394 0,09
798 Enterprise OHG 52.586 0,14

Я хочу извлечь только те строки, в которых у меня есть "номер строки числового номера", чтобы мои данные в конце выглядели следующим образом :

Column 1 Column 2 Column 3 Colum 4
2.000 Company A 8.876 0,02
248 Enterprise B 26.028 0,07
415 Company C Ltd. 21.412 0,06
668 Enterprise D AG 17.332 0,05
1.240 Company E GmbH 31.394 0,09
798 Enterprise OHG 52.586 0,14

Есть идеи, как это сделать? В основном, где мне нужна помощь, в частности, это создание регулярного выражения для фильтрации этих строк и записи извлеченной информации во фрейм данных, чтобы я мог выполнить некоторый анализ этого.

Ответы [ 3 ]

2 голосов
/ 13 января 2020

Вы можете попробовать:


data = """2.000 Company A 8.876 0,02
248 Enterprise B 26.028 0,07
193
dasdasdasd (asasas) sdasdasd
adsadsd asdasd asasa asassaas asas 
asas asas 31. January 2018 (continue)
asdasd – 99,00% (31. March 2017 – 99,98%) (continue)
amasdasd asas
asasas asas
asas asssssssssss
DDD
asdasdads in %
asdasd adasd asddasad 
(continue)
415 Company C Ltd. 21.412 0,06
668 Enterprise D AG 17.332 0,05
1.240 Company E GmbH 31.394 0,09
798 Enterprise OHG 52.586 0,14"""

reader = StringIO(data)
pattern = re.compile(r'([\d\.\,]+)\s+(\D*)([\d\.\,]+)\s([\d\.\,]+)$')
rows = []
for row in reader:
    match = pattern.search(row)
    if match:
        rows.append([match.group(1), match.group(2), match.group(3), match.group(4)])
df = pd.DataFrame(rows, columns=["Column 1", "Column 2", "Column 3", "Column 4"])

Выход

Column 1    Column 2    Column 3    Column 4
0   2.000   Company A   8.876   0,02
1   248 Enterprise B    26.028  0,07
2   415 Company C Ltd.  21.412  0,06
3   668 Enterprise D AG 17.332  0,05
4   1.240   Company E GmbH  31.394  0,09
5   798 Enterprise OHG  52.586  0,14
0 голосов
/ 13 января 2020

это будет соответствовать вашим требованиям,

pattern = r'[-+]?[0-9]*\.?[0-9]+ [a-zA-Z]*\.? [a-zA-Z]*\.?[a-zA-Z]*\.?.+ [-+]?[0-9]*\.?[0-9]+ [-+]?[0-9]*\,?[0-9]'
out=re.findall(pattern,yourstring)
0 голосов
/ 13 января 2020

Я могу дать вам регулярное выражение для вашего требуемого запроса:

\d*[.]?\d* [a-zA-Z]+ \d*[.]?\d* \d*[.]?\d*

Как разобрать ваши данные и импортировать их в ваш фрейм данных - это задача, которую я оставлю вам.

Используйте это, чтобы сопоставить «число (целое или десятичное) номер строки» с каждой строкой ваших данных.

...