EDITED
По сути, функция stack()
делает ваш набор данных длиннее НО , как вы можете видеть в примере распечатки:
строк, содержащих NaN
не включаются после суммирования. <------------- </p>
Рассмотрим приведенный ниже тестовый пример, добавлено TEST_VALUE
:
begin,end
NaN,2019-10-21 07:48:28.272688
NaN,2019-10-21 07:48:28.449916
2019-10-21 07:48:26.740378,NaN
2019-10-21 07:48:26.923764,NaN
NaN,2019-10-21 07:48:41.689466
2019-10-21 07:48:37.306045,TEST_VALUE
NaN,2019-10-21 07:58:00.774449
2019-10-21 07:57:59.223986,NaN
NaN,2019-10-21 08:32:37.004455
2019-10-21 08:32:35.755252,NaN
df = pd.read_clipboard(sep=',')
print(df.shape)
print(df.stack().shape)
print(df.stack())
(10, 2)
(11, )
0 end 2019-10-21 07:48:28.272688
1 end 2019-10-21 07:48:28.449916
2 begin 2019-10-21 07:48:26.740378
3 begin 2019-10-21 07:48:26.923764
4 end 2019-10-21 07:48:41.689466
5 begin 2019-10-21 07:48:37.306045
end TEST_VALUE
6 end 2019-10-21 07:58:00.774449
7 begin 2019-10-21 07:57:59.223986
8 end 2019-10-21 08:32:37.004455
9 begin 2019-10-21 08:32:35.755252
# this part is strange
print(df.stack()[5])
begin 2019-10-21 07:48:37.306045
end TEST_VALUE
dtype: object
Довольно странно, как индекс 5
по сравнению с остальными, и у меня нет ответа на вопрос, почему это тип мультииндекса, а остальные в Серии нет, но давайте продолжим ...
Как вы можете видеть, это добавило дополнительную строку для TEST_VALUE
, и ОПЯТЬ любое значение с NaN
не входит в составную версию.
Я бы " стандартизировать "или убедитесь, что ваши данные содержат либо NaN
или дату, либо заполните NaN
другим значением, используя fillna()
.
Если вы хотите сохранить ваши данные такими, какие они есть, вы также можете обработать данные порциями до нуля на ГДЕ (в моем примере это TEST_VALUE
), данные не являются в форме примерно так:
# read df in as an iterator with chunks
df1 = pd.read_clipboard(
sep=',',
chunksize=3 # change this to whatever chunksize you need
)
def test_chunks(df_iterator):
"""
Function that compares original df chunk size shape to stacked chunksize shape
Returns: original chunk where there is a mismatch in shapes
"""
for df_chunk in df_iterator:
original = df_chunk.shape[0]
stacked = df_chunk.stack().shape[0]
if original != stacked:
return df_chunk
bad_chunk = test_chunks(df1)
print(bad_chunk)
begin end
3 2019-10-21 07:48:26.923764 NaN
4 NaN 2019-10-21 07:48:41.689466
5 2019-10-21 07:48:37.306045 TEST_VALUE
Итак, хотя я не могу быть уверен, потому что у меня нет доступа к вашим полным данным, мой вердикт состоит в том, что это проблема единообразия данных.
Я надеюсь, что это полезно.