У меня есть смешанный столбец целой строки: как я могу изменить только строку? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть фрейм данных со столбцом с именем Text.Все строки этого столбца имеют следующий формат:

xxx - some sentence 

, где xxx - случайное число.Вот пример того, что у меня есть:

      Text
100 - Hello World
200 - Bye World
300 - Good World

Я хочу, чтобы python находил только строковые символы («некоторое предложение») и заменял его значением, которое я указал.В настоящее время я использую метод:

mapping = {"100 - Hello World":"100 - Bonjour Le Monde"}
df = df.replace({"Text":mapping})

, который отлично работает для небольших наборов данных, но этот набор данных имеет 15 000 записей + и несколько случайных чисел.Я бы предпочел не указывать каждый номер каждый раз.Как я могу сказать python найти строку и только перевести строку?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 13 июня 2019

regex=True

mapping = {"Hello World": "Bonjour Le Monde"}
df.replace({"Text":mapping}, regex=True)

                     Text
0  100 - Bonjour Le Monde
1         200 - Bye World
2        300 - Good World
0 голосов
/ 13 июня 2019

Итак, у вас есть ваш фрейм данных:

df = pd.DataFrame({'Text': ['100 - Hello World', '200 - Bye World', '300 - Good World']})
df

Text
0   100 - Hello World
1   200 - Bye World
2   300 - Good World

Вы можете извлечь две части столбца с помощью регулярного выражения:

df = df['Text'].str.extractall(r'([0-9]+) - (.*)')

        0       1
    match       
0   0   100     Hello World
1   0   200     Bye World
2   0   300     Good World

Вы создаете фрейм данных со всеми вашими переводами:

df_translate = pd.DataFrame({"en": ["Hello World", "Bye World", "Good World"], "fr": ["Bonjour Monde", "Au revoir le Monde", "Bon Monde"]})

    en              fr
0   Hello World     Bonjour Monde
1   Bye World       Au revoir le Monde
2   Good World      Bon Monde

Вы объединяете два кадра данных и создаете свой столбец обратно:

pd_res = pd.merge(df, df_translate, left_on=1, right_on='en', how='left')
pd_res['res'] = pd_res[0] + ' - ' + pd_res['fr']

    0       1               en              fr                  res
0   100     Hello World     Hello World     Bonjour Monde       100 - Bonjour Monde
1   200     Bye World       Bye World       Au revoir le Monde  200 - Au revoir le Monde
2   300     Good World      Good World      Bon Monde           300 - Bon Monde
0 голосов
/ 13 июня 2019

Будучи xxx - some sentence значением в вашем столбце, это целая строка. Вам нужно «перевести» только часть строки после -.

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

def translating(txt):
    print(txt)
    return input()

def substituting(x):
    spv = [el.strip() for el in x['Text'].split('-')]
    tl = translating(spv[1])
    return ' - '.join([spv[0], tl])

ddf = df.apply(substituting, axis=1)
print(ddf)

translating - это функция, которая переводит. Здесь я печатаю строку и спрашиваю пользователя о замене во время выполнения, чтобы дать вам идею. Если у вас 15 тыс. Строк, вам, вероятно, нужно автоматизировать этот механизм замещения с помощью словаря или инструмента перевода.

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