У меня есть локальная база данных Postgres, которую мне нужно загрузить на S3, а затем скопировать в Redshift.Pandas Чтение SQL в CSV-Int-преобразование
Для этого я использую Python панда следующим образом:
engine = create_engine(self.engine)
connection = engine.raw_connection()
df = pd.read_sql(<sql string>, connection, coerce_float=False)
df.to_csv(<output fn>, header=True, index=False, encoding='utf-8')
SQL, что он выполняет возвращает строку varchar(255), varchar(255), int, int
. Однако, поскольку некоторые из этих значений могут быть нулевыми, я запускаю Pandas Caveat about integers and NaN values.
This post решает проблему, устанавливая na произвольным int и астерически явно как int. Они могут это сделать, потому что все их столбцы имеют один и тот же тип данных. Однако у меня есть сочетание varchar (255) и int.
Как я могу заставить df.to_csv(...)
вывести мои ints как int (а не плавает)?
Спасибо,
Я хочу, чтобы nulls оставались нулями. Я не хочу, чтобы они были произвольными. Если это так, копия Redshift вставляет произвольное значение int в качестве значения этой записи. – dlstadther
Что такое нулевой идентификатор Redshift? Если это похоже на «\ N» в SQL, вы можете преобразовать столбец в varchar и заменить все нулевые значения на «\\ N» ... – Kartik
Команда копирования Redshift позволяет использовать BLANKASNULL и EMPTYASNULL. Поля в красном смещении не могут изменить их тип данных. Скорее, вы должны создать новый столбец нужного типа данных, а затем выполнить обновление
Смежные вопросы