Python - переиндексировать месячные значения - PullRequest
0 голосов
/ 07 июня 2018

У меня есть несколько DataFrames, среднемесячных значений, как указано ниже:

Month,Value1,Value2
02,1,1
03,2,2
04,3,3
06,4,4
07,5,5
08,6,6
09,7,7
10,8,8
12,9,9

Моя проблема в том, что эти Dataframes отсутствуют несколько месяцев, в прилагаемых примерах месяц 1, 5 и 11 отсутствуют.

Поэтому я хотел бы переиндексировать фрейм данных и заполнить недостающие значения NaN следующим образом:

Month,Value1,Value2
01,NaN,NaN
02,1,1
03,2,2
04,3,3
05,NaN,NaN
06,4,4
07,5,5
08,6,6
09,7,7
10,8,8
11,NaN,NaN
12,9,9

Я сделал этот небольшой код:

data = pd.read_csv("test.csv", index_col=[0])
new_index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
data = data.reindex(new_index)

К сожалению,выходной сигнал далек от желаемого, и все значения теперь заменяются на NaN:

Month,Value1,Value2
01,NaN,NaN
02,NaN,NaN
03,NaN,NaN
04,NaN,NaN
05,NaN,NaN
06,NaN,NaN
07,NaN,NaN
08,NaN,NaN
09,NaN,NaN
10,NaN,NaN
11,NaN,NaN
12,NaN,NaN

Кто-нибудь знает почему?а может как это исправить?

1 Ответ

0 голосов
/ 07 июня 2018

Когда вы читаете CSV, индекс имеет тип int64, вы можете проверить следующее:

data = pd.read_csv("test3.csv", index_col=[0])
print(data.index.dtype)

Результат:

int64

Теперь при использовании reindex как показано ниже:

new_index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
data = data.reindex(new_index)

В приведенном выше примере, если new_index относится к типу str, он не соответствует существующему индексу, и будет создан новый объект: согласно документации :

Строка документа:

Соответствует DataFrame новому индексу с необязательной логикой заполнения, размещая NA / NaN в местоположениях, не имеющих значения в предыдущем индексе.Новый объект создается, если только новый индекс не эквивалентен текущему и copy = False

Следовательно, вы можете попробовать использовать новый индекс с типом int вместо str:

new_index = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]   
data = data.reindex(new_index)
...