python - 使用 pyarrow 将结构列写入镶木地板
问题描述
我有以下数据框和架构:
df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['a', 'b', 'c'])
SCHEMA = pa.schema([("a_and_b", pa.struct([('a', pa.int64()), ('b', pa.int64())])), ('c', pa.int64())])
然后我想从 df 创建一个 pyarrow 表并使用这个模式将它保存到镶木地板。但是,我找不到在 pandas 中创建与 pyarrow 中的结构类型相对应的正确类型的方法。有没有办法做到这一点?
解决方案
对于pa.struct
从 pandas 进行的转换,您可以使用元组(例如:)[(1, 4), (2, 5), (3, 6)]
:
df_with_tuples = pd.DataFrame({
"a_and_b": zip(df["a"], df["b"]),
"c": df["c"]
})
pa.Table.from_pandas(df_with_tuples, SCHEMA)
或 dict [{'a': 1, 'b': 2}, {'a': 4, 'b': 5}, {'a': 7, 'b': 8}]
:
df_with_dict = pd.DataFrame({
"a_and_b": df.apply(lambda x: {"a": x["a"], "b": x["b"] }, axis=1),
"c": df["c"]
})
pa.Table.from_pandas(df_with_dict , SCHEMA)
从箭头转换回熊猫时,struct 表示为 dict:
pa.Table.from_pandas(df_with_dict , SCHEMA).to_pandas()['a_and_b']
| a_and_b |
|:-----------------|
| {'a': 1, 'b': 2} |
| {'a': 4, 'b': 5} |
| {'a': 7, 'b': 8} |
推荐阅读
- python - 如何使用 Python3.6 tarfile 模块从内存中读取?
- javascript - 画布重新绘制卡住(性能问题)
- java - 将 JSON 文件中的字符串数组解析为全局变量,但使用时数组内容为空
- android - (离子/电容器)-> 没有在 Android 设备上构建的 TypeScript 源映射
- reactjs - 如何延迟 CPU 密集型任务以允许渲染发生
- cmake - 如何使用 add_subdirectory() 包含在其他地方构建的输出
- flutter - 防止滑动返回第一页
- vba - Visio - 如何将形状存储在临时变量中?
- c++ - ConvertToReferencePoint 方法不起作用,作业参数为 NULL (HyperV 2016)
- android - 在平板电脑上运行时导航抽屉膨胀异常