#python #pandas
#python #pandas
Вопрос:
Предположим, у меня есть следующая серия (тип — string)
0 F0/Images/1/15.tiff
1 F0/Images/1/15.tiff
2 F0/Images/1/15.tiff
3 F0/Images/1/15.tiff
4 F0/Images/1/15.tiff
Я хочу «добавить» 1 к числу непосредственно перед ‘.tiff’. Итак, я должен получить результат:
0 F0/Images/1/16.tiff
1 F0/Images/1/16.tiff
2 F0/Images/1/16.tiff
3 F0/Images/1/16.tiff
4 F0/Images/1/16.tiff
Как я могу это сделать в pandas?
Комментарии:
1. Можете ли вы предоставить нам фрагмент кода, над которым вы работаете?
Ответ №1:
Вы можете добиться этого с regex
помощью .
Мы можем определить функцию для их выполнения, а затем применить ее к нашему столбцу.
df
idx filename
0 0 F0/Images/1/15.tiff
1 1 F0/Images/1/15.tiff
2 2 F0/Images/1/15.tiff
3 3 F0/Images/1/15.tiff
4 4 F0/Images/1/15.tiff
def add_one(filename):
number = int(re.search(r'(?<=/)[0-9]{2}(?=.tiff)', filename).group()) 1
return re.sub(r'(?<=/)[0-9]{2}(?=.tiff)', str(number), filename)
df['filename'] = df['filename'].apply(add_one)
df
idx filename
0 0 F0/Images/1/16.tiff
1 1 F0/Images/1/16.tiff
2 2 F0/Images/1/16.tiff
3 3 F0/Images/1/16.tiff
4 4 F0/Images/1/16.tiff
Ответ №2:
С именем столбца 0
вы можете использовать str.extract
для выполнения некоторых векторизованных регулярных выражений pandas. Это относится к именам файлов с любым расширением файла (т.Е. Не Только .tiff
к файлам):
df = pd.DataFrame({0: {0: 'F0/Images/1/15.tiff',
1: 'F0/Images/1/15.tiff',
2: 'F0/Images/1/15.tiff',
3: 'F0/Images/1/15.tiff',
4: 'F0/Images/1/15.tiff'}})
s = (df[0].str.extract('(d )..*
Ответ №3:
Учитывая, что у вас всегда будет путь, заканчивающийся цифрами, за которым следует расширение без цифр:
yourserie.str.replace('(.*)([0-9] )(.[A-Za-z]*)',lambda x:x.group(1) str(int(x.group(2)) 1) x.group(3))
Полный пример, включая генерацию входных данных:
yourserie = pd.Series(['F0/Images/1/15.tiff','F0/Images/1/15.tiff','F0/Images/1/15.tiff'])
yourserie.str.replace('(.*)([0-9] )(.[A-Za-z]*)',lambda x:x.group(1) str(int(x.group(2)) 1) x.group(3))
Комментарии:
1. Не могли бы вы привести пример такой работы? Когда я выполняю это для столбца, он возвращает то же значение, без увеличения числа.
2. я добавил свой реплицированный ввод из вашего, он работает для меня
).astype(int) 1).astype(str)
df[0] = df[0].str.extract('(.*/)d .*
Ответ №3:
Учитывая, что у вас всегда будет путь, заканчивающийся цифрами, за которым следует расширение без цифр:
Полный пример, включая генерацию входных данных:
Комментарии:
1. Не могли бы вы привести пример такой работы? Когда я выполняю это для столбца, он возвращает то же значение, без увеличения числа.
2. я добавил свой реплицированный ввод из вашего, он работает для меня
) s df[0].str.extract('(..*$)')
df
0
0 F0/Images/1/16.tiff
1 F0/Images/1/16.tiff
2 F0/Images/1/16.tiff
3 F0/Images/1/16.tiff
4 F0/Images/1/16.tiff
Ответ №3:
Учитывая, что у вас всегда будет путь, заканчивающийся цифрами, за которым следует расширение без цифр:
Полный пример, включая генерацию входных данных:
Комментарии:
1. Не могли бы вы привести пример такой работы? Когда я выполняю это для столбца, он возвращает то же значение, без увеличения числа.
2. я добавил свой реплицированный ввод из вашего, он работает для меня