Как получить слова слева и справа от подчеркивания из строк в другом столбце? Python - PullRequest
0 голосов
/ 03 февраля 2020

Я объединил все .csv в моем каталоге в один большой фрейм данных, и один из столбцов - это имя файла каждого файла.

Это мои имена файлов:

['Accelerometer-2011-05-30-09-36-50-brush_teeth-f1.txt',

 'Accelerometer-2011-05-30-08-35-11-brush_teeth-f1.txt',

 'Accelerometer-2011-06-02-10-45-50-brush_teeth-f1.txt',

 'Accelerometer-2011-06-02-10-42-22-brush_teeth-f1.txt',

 'Accelerometer-2011-05-31-15-16-47-brush_teeth-f1.txt',

 'Accelerometer-2011-05-30-21-55-04-brush_teeth-m2.txt',

 'Accelerometer-2011-04-11-13-28-18-brush_teeth-f1.txt',

etc...]

I Я хочу создать еще один столбец с именем ['Action'], и он будет вытягивать слова влево и вправо от подчеркивания из имен файлов. Так что в этом случае это будет "brush_teeth".

Как бы я это сделал в python?

Ответы [ 3 ]

1 голос
/ 03 февраля 2020

Я согласен с комментариями. В зависимости от стабильности шаблона именования, вам вообще не нужно регулярное выражение. Вы можете решить это так:

mylist = ['Accelerometer-2011-05-30-09-36-50-brush_teeth-f1.txt',
 'Accelerometer-2011-05-30-08-35-11-brush_teeth-f1.txt',
 'Accelerometer-2011-06-02-10-45-50-wash_face-f1.txt',
 'Accelerometer-2011-06-02-10-42-22-brush_hair-f1.txt',
 'Accelerometer-2011-05-31-15-16-47-wash_hair-f1.txt',
 'Accelerometer-2011-05-30-21-55-04-iron_clothes-m2.txt',
 'Accelerometer-2011-04-11-13-28-18-make_bed-f1.txt']

output = []
for i in mylist:
    result = i.split("-")
    for z in result:
        if "_" in z:
            output.append(z)

print(output)
>>> ['brush_teeth', 'brush_teeth', 'wash_face', 'brush_hair', 'wash_hair', 'iron_clothes', 'make_bed']
0 голосов
/ 03 февраля 2020

Мы можем использовать регулярное выражение, чтобы извлечь значение перед расширением файла, которое также не равно da sh, используя положительный взгляд в будущее.

df['file_name'].str.extract(r'(\w+(?=\s*-\w+\.[^\.]))')

print(df)
                                           file_name       action
0  Accelerometer-2011-05-30-09-36-50-brush_teeth-...  brush_teeth
1  Accelerometer-2011-05-30-08-35-11-brush_teeth-...  brush_teeth
2  Accelerometer-2011-06-02-10-45-50-brush_teeth-...  brush_teeth
3  Accelerometer-2011-06-02-10-42-22-brush_teeth-...  brush_teeth
4  Accelerometer-2011-05-31-15-16-47-brush_teeth-...  brush_teeth
5  Accelerometer-2011-05-30-21-55-04-brush_teeth-...  brush_teeth
6  Accelerometer-2011-04-11-13-28-18-brush_teeth-...  brush_teeth
0 голосов
/ 03 февраля 2020

Я бы посоветовал, в зависимости от размера файла, делать все споры в ванили python перед загрузкой в ​​pandas, так как скорость будет выше. Мои два цента, хотя. Это один из способов решения проблемы. Я считаю, что варианты в разделе комментариев будут более чем решить эту проблему. Индексируется в -2 из-за местоположения.

text = ['Accelerometer-2011-05-30-09-36-50-brush_teeth-f1.txt',

        'Accelerometer-2011-05-30-08-35-11-brush_teeth-f1.txt',

        'Accelerometer-2011-06-02-10-45-50-brush_teeth-f1.txt',

        'Accelerometer-2011-06-02-10-42-22-brush_teeth-f1.txt',

        'Accelerometer-2011-05-31-15-16-47-brush_teeth-f1.txt',

        'Accelerometer-2011-05-30-21-55-04-brush_teeth-m2.txt',

        'Accelerometer-2011-04-11-13-28-18-brush_teeth-f1.txt',]

(pd.DataFrame(text)
.assign(Action = lambda x: x[0].str.split('-').str[-2]))

       0                                                Action
0   Accelerometer-2011-05-30-09-36-50-brush_teeth-...   brush_teeth
1   Accelerometer-2011-05-30-08-35-11-brush_teeth-...   brush_teeth
2   Accelerometer-2011-06-02-10-45-50-brush_teeth-...   brush_teeth
3   Accelerometer-2011-06-02-10-42-22-brush_teeth-...   brush_teeth
4   Accelerometer-2011-05-31-15-16-47-brush_teeth-...   brush_teeth
5   Accelerometer-2011-05-30-21-55-04-brush_teeth-...   brush_teeth
6   Accelerometer-2011-04-11-13-28-18-brush_teeth-...   brush_teeth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...