Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy数组作为数据帧中的元素_Python_Pandas_Dataframe_Multidimensional Array - Fatal编程技术网

Python Numpy数组作为数据帧中的元素

Python Numpy数组作为数据帧中的元素,python,pandas,dataframe,multidimensional-array,Python,Pandas,Dataframe,Multidimensional Array,如何将numpy数组放入数据帧的元素(单个单元格)中?比如说, Driver Make Model Coordinates Bob Ford Focus [[1, 0, 1],[1, 2, 3], [2, 0, 2]] Sally Ford Echo [[0, 0, 1],[0, 2, 0]] 我尝试将数组存储在每一行上,但文档似乎不支持这一点 背景: 我希望使用df.to_json()将数据导出到一个json文件中,以后可以从该文件将数据读取到一个数据帧中,其中每

如何将numpy数组放入数据帧的元素(单个单元格)中?比如说,

Driver  Make  Model  Coordinates
Bob     Ford  Focus  [[1, 0, 1],[1, 2, 3], [2, 0, 2]]
Sally   Ford  Echo   [[0, 0, 1],[0, 2, 0]]
我尝试将数组存储在每一行上,但文档似乎不支持这一点

背景:


我希望使用
df.to_json()
将数据导出到一个json文件中,以后可以从该文件将数据读取到一个数据帧中,其中每一行都是一个单独的数据帧。我应该考虑换一种方式吗?

是的,你可以。使用
.at[]
.iat[]
可避免在尝试将iterable放入单个单元格时出现广播行为。这也适用于
列表
设置

坏的方面是:以一种优化的方式完成这样的分配可能非常具有挑战性,这种方式不涉及行的迭代。也就是说,这对于大小合理的阵列仍然是可行的。如果您真的需要存储数百万这样的阵列,则可能需要进行根本性的重新设计。例如,重新构造代码,改用MongoDB或其他存储工具等

import pandas as pd
import numpy as np

# preallocate the output dataframe
df = pd.DataFrame(
    data=np.zeros((2,4), dtype=object),
    columns=["Driver", "Make", "Model", "Coordinates"]
)

# element-wise assignment
df.at[0, "Coordinates"] = np.array([[1, 0, 1],[1, 2, 3], [2, 0, 2]])
df.at[1, "Coordinates"] = np.array([[0, 0, 1],[0, 2, 0]])
# other elements were omitted
结果

print(df)
  Driver Make Model                        Coordinates
0      0    0     0  [[1, 0, 1], [1, 2, 3], [2, 0, 2]]
1      0    0     0             [[0, 0, 1], [0, 2, 0]]

print(df.at[0, "Coordinates"])
[[1 0 1]
 [1 2 3]
 [2 0 2]]

print(type(df.at[0, "Coordinates"]))
<class 'numpy.ndarray'>
打印(df)
驱动程序生成模型坐标
0      0    0     0  [[1, 0, 1], [1, 2, 3], [2, 0, 2]]
1      0    0     0             [[0, 0, 1], [0, 2, 0]]
打印(在[0,“坐标”]处测向)
[[1 0 1]
[1 2 3]
[2 0 2]]
打印(类型(在[0,“坐标”]))

谢谢。很明显,我遇到的问题是试图将矩阵的多行解释为数据帧中的行的“广播”行为。“.at”方法修复了它。