У меня есть фрейм данных pandas с двумя столбцами, первый из которых называется «Письма» и содержит две буквы (например, AB), а другой, озаглавленный «Числа», имеет числа (от 1 до 9999). Теперь я хочу объединить их, чтобы первая строка с «Буквы» = XY и «Числа» = 4 стала XY0004, в основном гарантируя, что обе ячейки объединены, но числовая ячейка имеет дополнительные 0 нулей. Ряд 2 с ZW и 333 станет ZW0333. Строка 3 с AB и 1234 станет AB1234. Как я могу сделать это хорошо?
Пытаться:
df['New Col'] = df.apply(lambda row: row['Letters'] + str(row['Numbers']).zfill(4), axis=1)
Это изменит ваш DataFrame, чтобы включить новый столбец.
@Huebschi Ты уверен? В моей консоли работает нормально. Где ваша трассировка говорит о SyntaxError?
Используйте панды astype
для преобразования int
в str
и используйте zfill
для добавления ведущих нулей:
# Example dataframe
df = pd.DataFrame({'Letters':['AB', 'XY', 'ZW'],
'Numbers': [1234, 4, 333]})
print(df)
Letters Numbers
0 AB 1234
1 XY 4
2 ZW 333
df['Merged'] = df['Letters'] + df['Numbers'].astype(str).str.zfill(4)
print(df)
Letters Numbers Merged
0 AB 1234 AB1234
1 XY 4 XY0004
2 ZW 333 ZW0333
Редактировать после того, как OP прокомментировал, что у него есть floats
в виде числовых значений.
Как предложил ChrisA, используйте следующее:
df['Merged'] = df['Letters'] + df['Numbers'].astype(int).astype(str).str.zfill(4)
print(df)
Letters Numbers Merged
0 AB 1234.0 AB1234
1 XY 4.0 XY0004
2 ZW 333.0 ZW0333
Спасибо за полный ответ. Это работает, единственная проблема, которая у меня есть, это то, что я получаю этот AB1234.0. Как мне избавиться от .0?
@Huebschi, может быть, нужно df['Letters'] + df['Numbers'].astype(int).astype(str).str.zfill(4)
избавиться от десятичной дроби?
Что говорит ChrisA. Судя по всему, у вас вместо float
число типов integers
. См. редактирование для решения @Huebschi
Да, это сработало, большое спасибо. Извините за мое невежество :)
Я получаю SyntaxError: неверный синтаксис