добавить str в начало каждого значения строки

#python #pandas

#python #панды

Вопрос:

У меня есть фрейм данных pandas

df = pd.DataFrame({'num_legs': [1, 34, 34, 104 , 6542, 6542 , 48383]})

Я хочу добавить a str перед значением каждой строки.

Это str ZZ00000

Загвоздка в том, что данные строки всегда должны быть = всего 7 символов

таким образом, желаемый результат будет

 df =    num_legs
0   ZZ00001
1   ZZ00034
2   ZZ00034
3   ZZ00104
4   ZZ06542
5   ZZ06542
6   ZZ48383
 

Поскольку столбец имеет тип int , я думал о переходе на str тип, а затем, возможно, с помощью регулярных выражений и некоторых str манипуляций для достижения желаемого результата..

Есть ли более упрощенный способ, возможно, используя функцию с pandas ?

Ответ №1:

Используйте

 df['num_legs'] = "ZZ"   df['num_legs'].astype(str).str.rjust(5, "0")
 

Ответ №2:

Здесь вы могли бы использовать конкатенацию строк:

 df["num_legs"] = 'ZZ'   ('00000'   str(df["num_legs"]))[-5:]
 

Идея здесь заключается в том, что, учитывая num_legs , скажем, целочисленное значение 6542 , мы сначала формируем следующую строку:

 000006542
 

Затем мы сохраняем правильные 5 символов, оставляя 06542 .

Ответ №3:

Вы также можете добавить, используя следующее:

 'ZZ'   df['num_legs'].astype(str).str.pad(width=5, side='left', fillchar='0')
 

Здесь вы добавляете свой текущий номер (преобразованный в строку) слева с нулями шириной до 5 и объединяете его с вашей строкой ‘ZZ’.

Ответ №4:

Используйте pythons .zfill()

 df['num_legs']='zz' df['num_legs'].astype(str).str.zfill(7)
 

Ответ №5:

Вы могли бы попробовать это — используя регулярное выражение и цикл for: для строк циклы for обычно более эффективны, чем строковые методы pandas :

     import re

variable = "ZZ00000"

df["new_val"] = [re.sub("d"   f"{{{len(num)}}}$", num, variable) 
                for num in df.num_legs.astype(str)]
df

  num_legs  new_val
0   1       ZZ00001
1   34      ZZ00034
2   34      ZZ00034
3   104     ZZ00104
4   6542    ZZ06542
5   6542    ZZ06542
6   48383   ZZ48383
 

Ответ №6:

 out = []
for nl in df["num_legs"]:    
    out.append(f'ZZ{nl:05d}')
 

Остальное зависит от ваших выходных манипуляций

Комментарии:

1. for По возможности следует избегать использования цикла python для перебора элементов в серии Pandas. Pandas поставляется с методами для достижения требуемого результата без необходимости цикла for.