我有一个大型数据集,其中包含许多以(压缩)JSON格式存储的列。我想将其转换为Parquet格式以进行后续处理。一些列具有嵌套结构。目前,我希望忽略此结构,并将这些列仅作为(JSON)字符串写出。
因此,对于我已经确定的列,我正在执行以下操作:
df[column] = df[column].astype(str)
然而,我不确定哪些列是嵌套的,哪些不是。当我使用parquet写入时,会出现以下消息:
<stack trace redacted>
File "pyarrow/_parquet.pyx", line 1375, in pyarrow._parquet.ParquetWriter.write_table
File "pyarrow/error.pxi", line 78, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Nested column branch had multiple children: struct<coordinates: list<item: double>, type: string>
这表示我未能将一个嵌套对象列转换为字符串。但是哪一列有问题?我该如何找出?
当我打印出 Pandas 数据帧的 .dtypes
时,我无法区分字符串和嵌套值,因为两者都显示为 object
。
编辑:错误会通过显示结构详细信息来提示嵌套列,但这需要耗费相当长的调试时间。而且它只会打印第一个错误,如果你有多个嵌套列,这可能会变得非常麻烦。
list
,dict
等)的列?并且您想将它们转换为字符串? - dsmilopyarrow.parquet.write_table
处理。 "Nested column"是parquet中的术语,在“pandas dataframe”中并没有太多意义。请明确定义这些术语。 - gdlmxdf.applymap(type)
来获取数据框中每个单元格的类型信息。df.applymap(type).eq(dict).any()
会返回 True,如果每列中至少有一个单元格是字典类型。因此,如果我们使用df.applymap(type).eq(dict).any()
,我们可以过滤掉对应的列。 - ansev