Не удается добавить заголовки столбцов к кадру данных при использовании to_dict () в пандах

Это фактически не имеет ничего общего с значениями по умолчанию, кроме того, что часто возникает неожиданное поведение при записи функций с изменяемыми значениями по умолчанию.

>>> def foo(a):
    a.append(5)
    print a

>>> a  = [5]
>>> foo(a)
[5, 5]
>>> foo(a)
[5, 5, 5]
>>> foo(a)
[5, 5, 5, 5]
>>> foo(a)
[5, 5, 5, 5, 5]

В этом нет значений по умолчанию код, но вы получаете точно такую ​​же проблему.

Проблема в том, что foo является изменением изменчивой переменной, переданной от вызывающего, когда вызывающий объект не ожидает этого , Код, подобный этому, был бы хорош, если бы функция была вызвана как-то вроде append_5; то вызывающий абонент будет вызывать функцию, чтобы изменить значение, которое они передают, и поведение будет ожидаться. Но такая функция вряд ли примет аргумент по умолчанию и, вероятно, не вернет список (поскольку у вызывающего уже есть ссылка на этот список, тот, который он только что передал).

Ваш оригинал foo с аргументом по умолчанию не должен изменять a, был ли он явно передан или получил значение по умолчанию. Ваш код должен оставлять изменчивые аргументы отдельно, если из контекста / имени / документации не ясно, что аргументы должны быть изменены. Использование измененных значений, передаваемых в качестве аргументов, таких как локальные временные файлы, является крайне плохой идеей, независимо от того, находимся ли мы на Python или нет, и есть ли задействованные аргументы по умолчанию.

Если вам нужно разрушить локальное временное в процессе вычисления чего-то, и вам нужно начать свою манипуляцию из значения аргумента, вам нужно сделать копию.

0
задан rup 26 March 2019 в 14:50
поделиться

1 ответ

Мне удалось найти обходной путь, который заключается в передаче dict.items () параметру pd.DataFrame.

Мой код ниже:

df = pd.DataFrame(dict_of_files_local.items(), columns=['Timestamp', 'Filename'])

Теперь выводит следующее:

            Timestamp                           Filename
0 2019-02-07 09:11:39  C:\csv\myfile_20190207_091139_...
1 2019-02-08 03:08:11  C:\csv\myfile_20190208_030811_...
0
ответ дан rup 26 March 2019 в 14:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: