Как объединить несколько фреймов данных с длинным индексом без ошибок? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть каталог "... / dados", в котором есть несколько подкаталогов, имена которых представляют собой серийный номер плюс некоторая бесполезная информация - например, «17448_2017_Jul_2017_Oct», где первый номер на нем - серийный номер. Внутри каждого подкаталога у меня есть четыре файла «.txt», строки / строки которых содержат информацию о дате и времени, а также атрибут определенного типа, скажем, влажности, которые называются одинаково в каждом подкаталоге - например, "2019-01-29 03:11:26 54,7".

Я хочу объединить их все для создания набора данных с индексом даты.

path = "/.../dados/"

df = pd.DataFrame()

for fld in os.listdir(path):
    subfld = path + fld
    if os.path.isdir(subfld):
        aux = pd.DataFrame()
        sn = fld.split('_')[0]
        for file in os.listdir(subfld):
            filepath = os.path.join(subfld, file)
            if os.path.isfile(filepath):
                new_col = pd.read_fwf(filepath, colspecs=[(0, 19), (20, -1)], skiprows=8, names=[file.split('_')[2][:-4]], parse_dates=[0], nrows=9999999)
                aux = pd.concat([aux, new_col], axis=1,  sort=False)
        aux['Machine'] = sn
        df = df.append(aux)

Это отпечаток df.head (10):

HumTechRoom  TempTechRoom  TempExamRoom  HumExamRoom Machine
2018-03-04 00:45:11         82.6           NaN           NaN          NaN   22162
2018-03-04 00:45:47         80.0           NaN           NaN          NaN   22162
2018-03-04 00:45:53         78.0           NaN           NaN          NaN   22162
2018-03-04 00:46:04         75.9           NaN           NaN          NaN   22162
2018-03-04 00:46:20         73.7           NaN           NaN         51.3   22162
2018-03-04 00:46:58         71.7           NaN           NaN          NaN   22162
2018-03-04 00:47:40          NaN           NaN           NaN         53.4   22162
2018-03-04 00:47:41          NaN          14.5           NaN          NaN   22162
2018-03-04 00:47:54         74.3           NaN           NaN          NaN   22162
2018-03-04 00:47:59         76.6           NaN           NaN          NaN   22162

Это сообщение об ошибке, которое я получаю:

...
line 31, in <module>
    aux = pd.concat([aux, new_col], axis=1,  sort=False)

  File ".../concat.py", line 226, in concat
    return op.get_result()

  File ".../concat.py", line 423, in get_result
    copy=self.copy)

  File ".../internals.py", line 5425, in concatenate_block_managers
    return BlockManager(blocks, axes)

  File ".../internals.py", line 3282, in __init__
    self._verify_integrity()

  File ".../internals.py", line 3493, in _verify_integrity
    construction_error(tot_items, block.shape[1:], self.axes)

  File ".../internals.py", line 4843, in construction_error
    passed, implied))

ValueError: Shape of passed values is (2, 19687), indices imply (2, 19685)

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Похоже, вы используете pd.concat по неправильной оси. Удалите axis=1 из вашей строки pd.concat.., так как axis=0 является значением по умолчанию, которое можно найти в документах

Только для вашего удобства. Чтобы получить более чистый кадр данных, используйте также ignore_index=True:

aux = pd.concat([aux, new_col], ignore_index=True,  sort=False)

Что возвращает индекс сброса.

1 голос
/ 27 мая 2019

Ваши фреймы данных имеют несовместимую форму:

ValueError: Shape of passed values is (2, 19687), indices imply (2, 19685)

Другими словами, проблема заключается в том, что 19687! = 19685. Какой бы ответ вы ни встретили, он вытекает из специфики ваших данных, котораявероятно, не практично поделиться, учитывая его размер.Вам нужно, как минимум, добавить или удалить 2 строки где-нибудь.Вам нужно будет провести расследование, чтобы определить, что и где.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...