#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']