Python panda read_csv:我们可以在一行中将字符串加载到NUMPY吗?

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

我把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 = 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笔记本上