大熊猫在CSV列中将NULL读取为\\ 0,并在JSON中以Unicode打印为

时间:2018-06-20 03:55:47

标签: python json pandas csv

我有一列csv的值为'\0'。我想将其作为\u0000值在json中打印。我使用了熊猫read_csv,并将列的dtypes设置为str来读取文件。当我将其打印到json时,它打印为\\0,即\0,反斜杠转义了。

如何正确将其读取为NULL字符并将其打印为Unicode \u0000

这是csv示例

id,data,timestamp
1,\0,2018-03-17 03:12:58
2,\0,2018-03-19 09:00:40
3,\0,2018-03-19 09:26:05

我期望的输出

{ "id": 1, "data": "\u0000", "timestamp":"2018-03-17T03:12:58.000Z"}
{ "id": 2, "data": "\u0000", "timestamp":"2018-03-19T09:00:40.000Z"}
{ "id": 3, "data": "\u0000", "timestamp":"2018-03-19T09:26:05.000Z"}

我如何使用大熊猫阅读

csvfile = open('somefile.csv', 'r')

col_names = ['id', 'data']
dtypes = { 'data': str }
df = pd.read_csv(csvfile, names=col_names, dtype=dtypes)

以及如何将其写入json

jsonfile = open('somefile.json', 'w')
df.to_json(jsonfile, orient='records', lines=True, date_format='iso')

1 个答案:

答案 0 :(得分:2)

\0不是CSV中空字节的有效表示形式。相反,它需要一个原义的空字节(这是可以的,因为解析器仅查找指定的分隔符以将流分成字段)。

要使用转义序列处理文件,可以在pd.read_csv()中指定encoding='unicode_escape'。这种编码会将转义序列解码为原义的空字符。