Pandas 将 CSV 列中的 '\0' 读取为 NULL 字符并在 JSON 中打印为 Unicode

Posted

技术标签:

【中文标题】Pandas 将 CSV 列中的 \'\\0\' 读取为 NULL 字符并在 JSON 中打印为 Unicode【英文标题】:Pandas read '\0' in CSV column as NULL character and print as Unicode in JSONPandas 将 CSV 列中的 '\0' 读取为 NULL 字符并在 JSON 中打印为 Unicode 【发布时间】:2018-11-29 02:24:51 【问题描述】:

我有一个 csv,其中一列具有 '\0' 值。我想在 json 中将其打印为 \u0000 值。我使用 pandas 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"

我如何使用 pandas 阅读它

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')

【问题讨论】:

您是否只使用 Pandas 读取 csv 并转换为 JSON?您是否将 Dataframe 用于其他用途? @ZakiIndra 如果答案解决了您的问题,请考虑accepting它。 (哇,真快:-)) 【参考方案1】:

\0 不是 CSV 中空字节的有效表示。相反,它需要一个文字空字节(这没关系,因为解析器只查找指定的分隔符来将流分隔为字段)。

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

【讨论】:

以上是关于Pandas 将 CSV 列中的 '\0' 读取为 NULL 字符并在 JSON 中打印为 Unicode的主要内容,如果未能解决你的问题,请参考以下文章

将 csv 文件作为浮点数读取到 pandas 数据帧

从 csv 中提取列中的数据,保存为字典(Python、Pandas)

当我将 pandas 数据框保存为 csv 文件时,从 18 位长的列中截断 3 位

当我使用 pandas 读取 .csv 中的特定列时,奇怪的跳转

如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?

如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?