我的数据集中的某些行是这样的:其中None被认为是整数。
Boston (2017) Documentary Jon Dunham 5-Dec-17 100 5 None 63 None
当我将此行插入Postgres时,其中None的列类型为INTEGER,我收到此错误:
psycopg2.DataError: invalid input syntax for integer: "None"
我将原始数据存储在csv文件中,它是一个非常大的数据集(大约2000年),我应该如何处理None值?
答案 0 :(得分:0)
没有价值,或在postgres中未知NULL
https://www.postgresql.org/docs/current/static/functions-comparison.html
空输入被视为逻辑值“未知”
如果您以csv格式存储原始数据,则使用unquoted empty string
将csv导入postgres,但是从您的示例中看起来您有tsc(制表符代替逗号),因此您应该使用{{1对于\N
s。
https://www.postgresql.org/docs/current/static/sql-copy.html
NULL
指定表示空值的字符串。默认值为\ N. (反斜杠-N)文本格式,以及CSV中未加引号的空字符串 格式。对于案例,您甚至可能更喜欢文本格式的空字符串 你不希望区分空字符串的空字符串。这个 使用二进制格式时不允许使用选项。
也可以从上面的引文中明确指出csv中的null
表示,例如:
NULL
我刻意制作了一个错误的#34;使用t=# create table n(i int, t text);
CREATE TABLE
t=# copy n from stdin delimiter '|' null 'None';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1|a
>> None|b
>> 2| None
>> None|None
>> \.
COPY 4
t=# select * from n;
i | t
---+-------
1 | a
| b
2 | None
|
(4 rows)
,提供i=2
,而不是" None"
- 如果您决定使用空标识符,则必须确保它在分隔符后确定,例如,如果您使用标签(如我假设的那样)你的样本),它应该是标签"None"
,而不是两个或四个空格,否则chr(9)
将被视为字符串值,而不是" None"
......