Получение TypeError: ожидается объект символьного буфера для вызова pandas.dataframe.replace?
Я создаю интерфейс между Python и Google листов, используя python2.7 & pygsheets:
Ошибка:
Traceback (most recent call last):
File "Tracker.py", line 108, in <module>
test.track()
File "Tracker.py", line 99, in track
self.sheet.set_dataframe(json.dumps(pd.DataFrame(list(cursor.fetchall())),default=iterencode),self.anchor,copy_index=False, copy_head=True, fit=False, escape_formulae=False,nan=str('\n'))
File "/usr/local/lib/python2.7/dist-packages/pygsheets/worksheet.py", line 742, in set_dataframe
df = df.replace(pd.np.nan, nan)
TypeError: expected a character buffer object
Я пробовал nan='NaN', '\n', а также 0- однако все возвращается с той же ошибкой.
Ошибка полностью в этой строке:
self.sheet.set_dataframe(json.dumps(pd.DataFrame(list(cursor.fetchall())),default=iterencode),self.anchor,copy_index=False, copy_head=True, fit=False, escape_formulae=False,nan=str('NanN'))
и на самом деле находится в последнем аргументе: nan=str('NaN')
Я проверил документацию панд для замены:
value : scalar, dict, list, str, regex, default None
Value to use to fill holes (e.g. 0), alternately a dict of values specifying which value to use for each column (columns not in the dict will not be filled). Regular expressions, strings and lists or dicts of such objects are also allowed.
что также кажется более или менее в соответствии.
У pygsheets/worksheet.py также нет ничего, кроме этой строки: df = df.replace(pd.np.nan, nan)
& nan - это неизмененный вклад, который я отправляю, т.е. str('NaN')
,
Мне интересно, что это означает - это проблема управления версиями, если какая-то версия Python или библиотеки не совпадает? или что-то другое?
Я взломал свой путь через это, напечатав в CSV-файл, а затем прочитав его как информационный кадр и передав его в функцию, потому что я не нашел решения вовремя.
Однако я все еще хотел бы понять, как и почему и где возникает эта проблема? Спасибо
1 ответ
Если вы пытаетесь заменить все NaN другим значением, почему бы не использовать df.fillna(newValue)
?