我有一个numpy
2D数组,其形状为(4898, )
,其中每行中的元素由分号分隔,但仍存储在单个列中而不是多列(期望的结果)。如何在2D阵列的每个阵列中每次出现分号时创建分割。我编写了以下Python脚本来执行此操作,但它会引发错误。
stochastic_gradient_descent_winequality.py
import numpy
import pandas
if __name__ == '__main__' :
with open('winequality-white.csv', 'r') as f_0 :
with open('winequality-white-updated.csv', 'w') as f_1 :
f_0.next()
for line in f_0 :
f_1.write(line)
wine_data = pandas.read_csv('winequality-white-updated.csv', sep = ',', header = None)
wine_data_ = wine_data
wine_data = numpy.array([x.split(';') for x in wine_data_], dtype = numpy.float)
print (numpy.shape(wine_data))
错误
Traceback (most recent call last):
File "stochastic_gradient_descent_winequality.py", line 16, in <module>
wine_data = numpy.array([x.split(';') for x in wine_data_], dtype = numpy.float)
AttributeError: 'numpy.int64' object has no attribute 'split'
答案 0 :(得分:4)
如果您使用分号(;
)作为csv文件分隔符而不是逗号(,
),则可以调整第一行:
wine_data = pandas.read_csv('winequality-white-updated.csv', sep = ';', header = None)
列表理解的问题是[x.split(';') for x in wine_data_]
遍历列名称。
在这种情况下,您不需要具有列表理解的行。您可以读取数据并完成。
wine_data = pandas.read_csv('winequality-white-updated.csv', sep = ',', header = None)
print (numpy.shape(wine_data))
答案 1 :(得分:1)
在此
x.split(';') for x in wine_data_
你得到的x
不是字符串。只有字符串split()
。如果它不是字符串,那么它将给出此错误
对象没有属性&#39; split
检查x
值。
答案 2 :(得分:1)
假设你的csv文件是这样的:
2.12;5.12;3.12
3.1233;4;2
4;4.9696;3
2;5.0344;3
3.59595;4;2
4;4;3.59595
...
然后改变你的代码:
import pandas, numpy
wine_data = pandas.read_csv('test.csv', sep = ',', header = None)
wine_data_ = wine_data
wine_data = numpy.array([x.split(';') for x in wine_data_[0]], dtype = numpy.float)
wine_data
wine_data
将是:
array([[ 2.12 , 5.12 , 3.12 ],
[ 3.1233 , 4. , 2. ],
[ 4. , 4.9696 , 3. ],
[ 2. , 5.0344 , 3. ],
[ 3.59595, 4. , 2. ],
[ 4. , 4. , 3.59595]])
更有效率:
import pandas, numpy
wine_data = pandas.read_csv('test.csv', sep = ';', header = None)
wine_data = numpy.array(wine_data,dtype = numpy.float)
答案 3 :(得分:0)
您可以尝试这样的事情...
def get_y(r):
return str(r['label']).split(' ')
result :
(PILImage mode=RGB size=800x800, TensorMultiCategory([0., 0., 0., 1., 0., 0.]))