Python 代码有什么问题。它存储的是空矩阵,除了它正在打印的几个地方&引用;

Python 代码有什么问题。它存储的是空矩阵,除了它正在打印的几个地方&引用;,python,pandas,numpy,Python,Pandas,Numpy,PS:df1。列[i]的值为字符串。它并非在所有情况下都是空的您的原始数据类型: import pandas as pd import numpy as np df1 = pd.read_csv("D:\PHD\obranking\demo.csv") Mat = np.empty((300, 300), dtype=str) for i in range(1,5502): for j in range(0,300): for k in range(0,300):

PS:
df1。列[i]
的值为字符串。它并非在所有情况下都是空的

您的原始数据类型:

import pandas as pd
import numpy as np
df1 = pd.read_csv("D:\PHD\obranking\demo.csv")

Mat = np.empty((300, 300), dtype=str)
for i in range(1,5502):
    for j in range(0,300):
        for k in range(0,300):
            if df1['label'][j] != df1['label'][k]:
                if df1[df1.columns[i]][j] != df1[df1.columns[i]][k]:
                    Mat[j][k] = Mat[j][k] + "," + df1.columns[i]
np.save("D:\PHD\obranking\MatDemo", Mat)
pandas
选择绕过
numpy
字符串数据类型,而是将字符串存储为对象,即Python字符串。
numpy
方法在内存方面更有效,至少在字符串大小大致相同的情况下是如此。但是,如果它们的大小差异很大,或者需要像这样增长,则对象数据类型更好

在本例中,您从
pandas
及其对象字符串开始,并将大量但数量可变的字符串添加到数组中。坚持使用对象数据类型可能是最好的。但是要注意开头的
None

另一种方法是收集列表中的字符串:

In [29]: arr[0] = ''                                                            
In [30]: arr                                                                    
Out[30]: array(['', None], dtype=object)
In [31]: arr[0] += ','+'foobar'                                                 
In [32]: arr                                                                    
Out[32]: array([',foobar', None], dtype=object)
In [33]: arr[0] += ','+'foobar'                                                 
In [34]: arr                                                                    
Out[34]: array([',foobar,foobar', None], dtype=object)
列表附加比字符串连接更有效,
join
在字符串之间放置分隔符的工作更干净


对象数据类型数组在性质和处理上接近于列表。它没有我们在数字数据类型中看到的快速处理

在示例数据和预期输出中,您不需要为简单的字符串串联嵌套3级for循环和范围。对于
str
dtype,
Mat
是一个“U1”数组,即,每个元素只能有1个字符。@hpaulj那么为了存储字符串而不是字符,需要将什么用作数据类型呢。我的意思是如何修改以将字符串存储为数组element@hpaulj我试图根据您的输入修改代码。我使用dtype='object'存储字符串的一个大串接'。这是我的代码```import pandas as pd import numpy as np df1=pd.read_csv(“D:\PHD\obranking\demo.csv”)Mat=np.empty((300300),dtype='object'),用于范围内的i(15502):用于范围内的j(0300):用于范围内的k(0300):如果df1['label'][j]!=df1['label'][k]:如果df1[df1.columns[i]][j]!=df1[df1.columns[i][k]:Mat[j][k]+='#'Mat[j][k]+=df1.columns[i]np.save(“D:\PHD\obranking\MatDemo”,Mat)```
In [18]: arr[0] += ','+'foobar'                                                 
In [19]: arr                                                                    
Out[19]: array([',', ''], dtype='<U1')
In [20]: arr = np.empty((2,), dtype='U10')                                      
In [21]: arr                                                                    
Out[21]: array(['', ''], dtype='<U10')    
In [22]: arr[0] += ','+'foobar'                                                 
In [23]: arr                                                                    
Out[23]: array([',foobar', ''], dtype='<U10')    # now we see the full addition
In [24]: arr[0] += ','+'foobar'                                                 
In [25]: arr                                                                    
Out[25]: array([',foobar,fo', ''], dtype='<U10')  # but still get truncation
In [26]: arr = np.empty((2,), dtype=object)                                     
In [27]: arr                                                                    
Out[27]: array([None, None], dtype=object)   # note the initial fill value

In [28]: arr[0] += ','+'foobar'                                                 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-28-2c5ca97a0fa9> in <module>
----> 1 arr[0] += ','+'foobar'

TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'
In [29]: arr[0] = ''                                                            
In [30]: arr                                                                    
Out[30]: array(['', None], dtype=object)
In [31]: arr[0] += ','+'foobar'                                                 
In [32]: arr                                                                    
Out[32]: array([',foobar', None], dtype=object)
In [33]: arr[0] += ','+'foobar'                                                 
In [34]: arr                                                                    
Out[34]: array([',foobar,foobar', None], dtype=object)
In [35]: arr[1]=[]                                                              
In [36]: arr                                                                    
Out[36]: array([',foobar,foobar', list([])], dtype=object)
In [37]: arr[1].append('foobar')                                                
In [38]: arr[1].append('foobar')                                                
In [39]: arr                                                                    
Out[39]: array([',foobar,foobar', list(['foobar', 'foobar'])], dtype=object)
In [40]: arr[1]=','.join(arr[1])                                                
In [41]: arr                                                                    
Out[41]: array([',foobar,foobar', 'foobar,foobar'], dtype=object)