Python panda read_csv:我们可以在一行中将字符串加载到NUMPY吗?
我把panda的read_csv参数弄糊涂了 我想用支持向量机做一个分类器。要使用分类器,我需要向量X和Y都是numpy。 我得到了一个csv文件,其中有两列:Python panda read_csv:我们可以在一行中将字符串加载到NUMPY吗?,python,pandas,numpy,Python,Pandas,Numpy,我把panda的read_csv参数弄糊涂了 我想用支持向量机做一个分类器。要使用分类器,我需要向量X和Y都是numpy。 我得到了一个csv文件,其中有两列: 第一列是数字(目标),例如1或0 第二列是带有“”分隔符的向量(特征),例如12 32 63 73 563 34 我遇到的问题是: 第一列中的值将作为“numpy.int32”加载 第二列中的值将作为'str'加载,而我希望它们是numpy数组 import pandas as pd import numpy as np DF = p
import pandas as pd
import numpy as np
DF = pd.read_csv("C:\\STUFF\\foo.csv")
df = DF.head(2)
X = df["firstcol"]
target = X.values
for i in target:
print (type(i))
Y = df["secondcol"]
feature = Y.values
for j in feature:
print (type(j))
<class 'numpy.int64'>
<class 'numpy.int64'>
<class 'str'>
<class 'str'>
问题是:将第二列转换为numpy的最快、最合适的方法是什么?这对我很有用:
t = ['12 32 63 73 563 34']
y = [int(x) for x in str.split(" ") for str in t]
print(y)
打印:[12,32,63,73,563,34]
。只有当所有单元格均为您指定的格式且其中没有任何字母时,此选项才有效。请尝试以下操作:
df["secondcol"].apply(lambda x: np.array(x.split()).astype(int))
假设您的csv文件如下所示:
1,12 32 63 73 563 34
2,12 32 63 73 563 33
4,12 32 63 73 563 35
更合乎逻辑的阅读方式是:
df=pd.read_csv('data.csv',header=None,sep='[ ,]',engine='python',index_col=0)
然后直接将数据放在cols中,第一列作为索引。每一行都是一个numpy数组
In [4]: df
Out[4]:
1 2 3 4 5 6
0
1 12 32 63 73 563 34
2 12 32 63 73 563 33
4 12 32 63 73 563 35
In [5]: df.loc[4]
Out[5]:
1 12
2 32
3 63
4 73
5 563
6 35
Name: 4, dtype: int64
In [6]: df.loc[4].values
Out[6]: array([ 12, 32, 63, 73, 563, 35], dtype=int64)
In [7]: df.loc[4].sum()
Out[7]: 778
但是为什么sep='[,]'?这是什么意思?Sep适用于表中的所有列,是吗?是的。这是一个正则表达式,意味着{“”,}中的每个字符在我的例子中都不起作用。当我想要打印数据帧时,不会发生任何事情。我开始想问题可能在我的yupiter笔记本上