С Новым годом, ребята. У меня есть Dataframe, содержащий int и строки в каждом столбце. В моем строковом столбце некоторые из моих значений содержат "-" посередине, и я хочу удалить любую строку, которая следует после "-". Взгляните на мой df ниже.

input:
    buzz_id     facet   facet_cls   facet_val   p_buzz_date
0   95713207    A3      Small           MN        20160101
1   95713207    S3      Small-box       Tbd       20160101
2   95713207    F1      Medium          es        20160101
3   95713207    A2      Medium-box      esf       20160101
4   95713207    A1      Dum-pal         ess       20160101
...


output:
    buzz_id     facet   facet_cls   facet_val   p_buzz_date
0   95713207    A3      Small           MN        20160101
1   95713207    S3      Small           Tbd       20160101
2   95713207    F1      Medium          es        20160101
3   95713207    A2      Medium          esf       20160101
4   95713207    A1      Dum             ess       20160101
...

Поэтому в моих столбцах «facet_cls» все, что идет после «-» (включая «-»), необходимо удалить. Кроме того, мои данные очень большие, поэтому я надеялся использовать самый быстрый процесс, который я смог найти. Любые идеи?

Заранее спасибо!

3
Kang 2 Янв 2018 в 12:05

2 ответа

Лучший ответ

Используйте split а затем выберите только первые значения списков по str[0]:

df['facet_cls'] = df['facet_cls'].str.split('-').str[0]
print (df)
    buzz_id facet facet_cls facet_val  p_buzz_date
0  95713207    A3     Small        MN     20160101
1  95713207    S3     Small       Tbd     20160101
2  95713207    F1    Medium        es     20160101
3  95713207    A2    Medium       esf     20160101
4  95713207    A1       Dum       ess     20160101

Деталь:

print (df['facet_cls'].str.split('-'))
0          [Small]
1     [Small, box]
2         [Medium]
3    [Medium, box]
4       [Dum, pal]
Name: facet_cls, dtype: object
2
jezrael 2 Янв 2018 в 09:06

Вы также можете сделать это, используя лямбда-выражение, как показано ниже:

df['facet_cls'] = df['facet_cls'].apply(lambda x:x.split('-')[0])
1
Sociopath 2 Янв 2018 в 10:03