Как преобразовать float в int и объединить со строкой?

#python #arrays #pandas #numpy #floating-point

Вопрос:

У меня есть масса лет , por . Годы в настоящее время являются плавающими и включают десятичную дробь, например 1942.0. Я хочу удалить десятичный знак и добавить «-12-31», чтобы у меня был массив с записями, которые выглядят как «1942-12-31». Я написал цикл ниже, но когда я его запускаю, десятичная дробь остается, и первые несколько экземпляров массива остаются неизменными. Где я ошибаюсь?

 por=CMStations.por for i in por:  int(i)  por.loc[i]=str(i) "-12-31"  

Ответ №1:

Десятичное число остается, потому что вы ничему не присваиваете int(i) . Попробуйте

 por=CMStations.por for i in por:  por.loc[i]=str(int(i)) "-12-31"  

Ответ №2:

Предположим, что por-это список в Python(я не думаю, что массив более распространен в Python, но они похожи), работает следующий код. Вам нужно присвоить int(i) новому значению, как и самому i, чтобы заменить его на int. В противном случае в i эффективно ничего не изменится. Кроме того, вы не можете напрямую изменить список, поэтому я создал новый список и вернул его в старый список.

 new_por = list()  for i in por:  i = int(i)  i = str(i)   "-12-31"  new_por.append(i)  por = new_por  

Ответ №3:

Это зависит от типа переменной por . Если это массив поплавков, вы можете изменить его только на другой float , а не на a string . Если уж на то пошло, создайте список для новых значений (строк) следующим образом:

 import numpy as np por = np.array([1942.0,1943.1,1944.2]) por_string = [] for i in por:  por_string.append(str(int(i)) "-12-31")  

На выходе получается:

 ['1942-12-31', '1943-12-31', '1944-12-31']  

Ответ №4:

Ты можешь продолжать в том же духе :

 por=[2021.0,2022.0,2023.0,2024.0,2025.0] por_new=[] for item in por:  if item!=int:  por_new.append(str(int(item)) "-12-31") print(por_new)  

выход

 ['2021-12-31', '2022-12-31', '2023-12-31', '2024-12-31', '2025-12-31']