Удалить указанные c числовые символы из ячейки Excel с обратным отсчетом - PullRequest
0 голосов
/ 25 мая 2020

У меня есть таблица Excel, где в моем столбце B есть следующая комбинация слов и букв

(Имя Фамилия 3to4Numbers PM / AM Месяц, дата Год)

Пример:

  • Кевин Харт 206 вечера 16 мая 2020
  • Майкл Б. Джордан 0339 утра 6 мая 2020

Я хочу go в каждой ячейке моего столбца B и удалить 3–4 Числа и pm или Am.

Я подумал о том, чтобы считать в обратном порядке и удалить позиции с 13 по 20, так как имена будут отличаться.

Есть еще идеи и как это сделать?

Ответы [ 3 ]

1 голос
/ 25 мая 2020

Редактировать : Я понимаю, что теперь вы можете иметь его в pandas. Если вы этого не сделаете, сделайте что-то вроде этого:

import pandas as pd
df = pd.read_csv('YOURFILE.CSV')

И затем вы запустите строку под #Solution в приведенном ниже коде, измените col на имя вашего столбца и col2 на то, что вы хотите, чтобы вызывал новый столбец. Вы можете снова сохранить файл, набрав df.to_csv('outputfile.csv'). Удачи!

Вот решение с использованием Regex.

# Sample data
import pandas as pd

df = pd.DataFrame({
    'col': ['Kevin Hart 206PM May 16 2020',
            'Michael B Jordan 0339AM May 06 2020',
           ]
})

# Solution
df['col2'] = df['col'].str.replace('\s\d{3,4}[AP]M', '')

print(df)

                                   col                          col2
0         Kevin Hart 206PM May 16 2020        Kevin Hart May 16 2020
1  Michael B Jordan 0339AM May 06 2020  Michael B Jordan May 06 2020
0 голосов
/ 26 мая 2020

В windows Excel 2016+ с функцией TEXTJOIN можно использовать следующую формулу:

=TEXTJOIN(" ",TRUE,FILTERXML("<t><s>"& SUBSTITUTE(TRIM(A1)," ","</s><s>") & "</s></t>","//s[not(contains(.,'AM')) and not(contains(.,'PM'))]"))

enter image description here

0 голосов
/ 25 мая 2020

Вот подход с использованием VBA:

до:

enter image description here
код:

Sub TimeKiller()
    Dim cell As Range, arr, s As String, a As String
    Dim i As Long

    For Each cell In Intersect(Range("B:B"), ActiveSheet.UsedRange)
        s = cell.Value
        If s <> "" Then
            arr = Split(s, " ")
               For i = LBound(arr) To UBound(arr)
                    a = arr(i)
                    If a Like "###AM" Or a Like "###PM" Or a Like "####AM" Or a Like "####PH" Then
                         arr(i) = ""
                     End If
                Next i
        End If
        cell.Value = Trim(Join(arr, " "))
    Next cell
End Sub

и после :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...