gpt4 book ai didi

pandas - 具有字典列表的列的pyarrow数据类型?

转载 作者:行者123 更新时间:2023-12-04 03:58:01 25 4
gpt4 key购买 nike

当我保存到 Parquet 文件时,是否应该对具有字典列表的列使用特殊的 pyarrow 数据类型?
如果我将列表或字典列表保存为字符串,我通常必须.apply(eval)字段,如果我再次将其读入内存,以便 Pandas 将数据识别为列表(因此我可以使用 pd.json_normalize 对其进行标准化)
列_a:

[
{"id": "something", "value": "else"},
{"id": "something2", "value": "else2"},
]
列_b:
["test", "test2", "test3"]
只是想知道我是否应该将这些数据保存为字符串以外的其他内容。
编辑 - 从 Zendesk 粘贴一些原始 JSON 的片段。审计字段有一个名为 的字段。事件 这是一个字典列表。在里面,也可以有其他字典列表( 附件 里面有一个名为 缩略图 的字典列表)
你能用 pa.map_ 来处理这样的情况吗?我有时需要从这些嵌套字段中检索数据,而这些数据最初我什至不知道存在。在我当前的 Parquet 数据集中, 事件 字段只是一列
(字符串类型)即使其中有许多嵌套字段。
udt = pa.map_(pa.string(), pa.string())
.
  "audit": {
"id": ,
"ticket_id": ,
"created_at": "",
"author_id": ,
"events": [
{
"id": ,
"type": "",
"author_id": ,
"body": "" ,
"plain_body": "",
"public": false,
"attachments": [
{
"url": "",
"id": ,
"file_name": "",
"content_url": "",
"content_type": "image/png",
"size": 2888,
"width": 100,
"height": 30,
"inline": false,
"deleted": false,
"thumbnails": [
{
"url": "",
"id": ,
"file_name": "",
"content_url": "",
"mapped_content_url": "",
"content_type": "image/png",
"size": 2075,
"width": 80,
"height": 24,
"inline": false,
"deleted": false
}
]
},

最佳答案

假设您有一个带有“字典”和字符串列的 df,并且字典都具有相同的键(id,在​​您的情况下是值):

df = pd.DataFrame({
'col1': pd.Series([
{"id": "something", "value": "else"},
{"id": "something2", "value": "else2"}
]),
'col2': pd.Series(['foo', 'bar'])
}
)

udt = pa.struct([pa.field('id', pa.string()), pa.field('value', pa.string())])
schema = pa.schema([pa.field('col1', udt), pa.field('col2', pa.string())])

table = pa.Table.from_pandas(df, schema)
df = table.to_pandas()
如果你的字典没有相同的键或者你事先不知道字典的键,你可以这样做:
df = pd.DataFrame({
'col1': pd.Series([
[('id', 'something'), ('value', '"else')],
[('id', 'something2'), ('value','else2')],
]),
'col2': pd.Series(['foo', 'bar'])
}
)

udt = pa.map_(pa.string(), pa.string())
schema = pa.schema([pa.field('col1', udt), pa.field('col2', pa.string())])

table = pa.Table.from_pandas(df, schema)
请注意, col1 的格式不同(它使用对列表而不是字典)。
您也不能将您的表转换回 Pandas ,因为它不受支持(尚):
table.to_pandas()
>>> ArrowNotImplementedError: No known equivalent Pandas block for Arrow data of type map<string, string> is known.


关于pandas - 具有字典列表的列的pyarrow数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63553715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com