繁体   English   中英

Python熊猫read_csv:我们可以在一行中将STRING加载到NUMPY吗?

[英]Python panda read_csv: can we load STRING to NUMPY in one line?

我对熊猫的read_csv参数感到困惑。

我想用支持向量机做一个分类器。 要使用分类器,我需要向量X和Y都为numpy。 我有一个csv文件,其中有两列:

  1. 第一列是数字(目标),例如1或0

  2. 第二列是带有分隔符“”的向量(功能),例如12 32 63 73 563 34。

我遇到的问题是:

  1. 第一列中的值将被加载为“ numpy.int32”

  2. 当我希望它们是numpy数组时,第二列中的值将被加载为“ str”。

     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的最快,最适当的方法是什么?

尝试这个:

df["secondcol"].apply(lambda x: np.array(x.split()).astype(int))

这对我有用:

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] 仅当所有单元格都采用您指定的格式并且其中没有任何字母时,此方法才有效。

假设您的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM