Python 数据帧值C/F连续原因
对于数字数据类型,熊猫数据帧值被实现为C连续numpy数组;对于字符串(对象)数据类型,熊猫数据帧值被实现为F连续numpy数组,原因是什么Python 数据帧值C/F连续原因,python,arrays,pandas,numpy,contiguous,Python,Arrays,Pandas,Numpy,Contiguous,对于数字数据类型,熊猫数据帧值被实现为C连续numpy数组;对于字符串(对象)数据类型,熊猫数据帧值被实现为F连续numpy数组,原因是什么 将numpy作为np导入,将pandas作为pd导入 ai=np.array([[0,1,2],[3,4,5]],dtype=np.int64) af=np.array([[0,1,2.],[3,4,5.],dtype=np.float64) ao=np.array(['000'、'111'、'222']、['333'、'444'、'555']],dtyp
将numpy作为np导入,将pandas作为pd导入
ai=np.array([[0,1,2],[3,4,5]],dtype=np.int64)
af=np.array([[0,1,2.],[3,4,5.],dtype=np.float64)
ao=np.array(['000'、'111'、'222']、['333'、'444'、'555']],dtype=object)
打印('C-连续:',
'i=',ai.flags['C_continuous'],
“f=”,af.flags['C_continuous'],
“o=”,ao.flags['C_continuous'],sep=”)
打印('C-连续:',
“i=”,pd.DataFrame(ai).values.flags['C_Continental'],
“f=”,pd.DataFrame(af).values.flags['C_continuous'],
“o=”,pd.DataFrame(ao.values.flags['C_Continental'],sep=”)
给予
C-连续:i=True f=True o=True
C-连续:i=真f=真o=假
谢谢你的帮助
pd.DataFrame(ai).values
是ai
的视图。修改ai
中的元素会更改数据帧中的相应元素。对于对象情况,情况并非如此<代码>值
是一个副本。这就好像面向列的系列
是主要的数据存储,而不是\u值
。但我不知道如何测试它。@hpaulj谢谢!我想知道将数据帧的值
数组存储为对象的F-连续数组是否有任何好处。我发现自己不得不担心Cython中的数字和对象值需要使用什么类型的内存视图,并希望理解为什么会这样做。为什么将所有数据类型存储在C-连续数组中是个坏主意?我不知道在创建数据帧时我们对值
属性有多大的控制。您是否正在考虑键入的内存视图?在ndarray
和它们之间有很好的关系,但是我没有看到任何关于pandas
和cython
@hpaulj的信息。是的,我实际上在使用pandas数据帧,但是正如您所指出的,cython没有与pandas集成,实际上我正在使用底层的numpy阵列,由于数组实现了Python缓冲区协议,因此使用数组的最佳方式是在Cython级别表示缓冲区的类型化内存视图,在处理对象时,将每列的值存储在一起可能更方便,例如,作为Fortran连续。