【问题标题】:how to convert pandas data frame into numpy data frame如何将熊猫数据框转换为numpy数据框
【发布时间】:2015-06-11 22:32:19
【问题描述】:

我有一个带有类标签的简单数据集并存储为“mydata.csv”,

GA_ID   PN_ID   PC_ID   MBP_ID  GR_ID   AP_ID   class
0.033   6.652   6.681   0.194   0.874   3.177     0
0.034   9.039   6.224   0.194   1.137   3.177     0
0.035   10.936  10.304  1.015   0.911   4.9       1
0.022   10.11   9.603   1.374   0.848   4.566     1

我只是使用给定的代码将此数据转换为 numpy 数组,以便我可以将此数据集用于预测和机器学习建模,但由于标头错误已引发“ValueError:无法将字符串转换为浮点数:”时我从文件中删除了标题这种方法对我很有效:

import numpy as np
#from sklearn import metrics
#from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

raw_data = open("/home/me/Desktop/scklearn/data.csv")
dataset = np.loadtxt(raw_data, delimiter=",")
X = dataset[:,0:5]
y = dataset[:,6]

我也尝试跳过标题但出现错误:

dataset = np.loadtxt(raw_data, delimiter=",")[1:]

然后我转移到 pandas 并能够从这个方法导入数据:

raw_data = pandas.read_csv("/home/me/Desktop/scklearn/data.csv")

但是在这里,当我尝试将其转换为 numpy 数组时,它再次显示错误,就像以前一样。

pandas 中是否有任何可用的方法可以: 将石南花保存为列表:

header_list = ('GA_ID','PN_ID','PC_ID' ,'MBP_ID' ,'GR_ID' , 'AP_ID','class')

最后一列作为类标签,其余部分(1:4,0:5) 用于模型构建的 numpy 数组:

我已经写了一个代码来获取列列表

clm_list = []
raw_data = pandas.read_csv("/home/me/Desktop/scklearn/data.csv")
clms = raw_data.columns()
for clm in clms:
    clm_list.append(clm)
print clm_list ## produces column list

【问题讨论】:

  • 不清楚您真正的问题是什么,pandas 数据帧与 sklearn 接口兼容,如果您不想将标头从 pandas 写入 csv,则可以在 @ 中传递参数 header=None 987654328@
  • @EdChum 是的,这是真的,实际上我的问题是 1)如果假设我将参数作为 header=None 传递并且在建模之后或在特征选择时我想知道标题我怎么知道标题,因为我在打开文件时忽略了标题。 2)我如何直接使用给定的示例数据和 pandas 以 X =(没有标题和类标签的数据)和 y =(预测的类标签)形式的 scikit-learn 数据框
  • 你可以很好地完成所有这些 pandas,就像我说的 sklearn 接口与 pandas dfs 兼容
  • @EdChum 嗨,感谢您的回复,我已经解决了我的问题并写下了我作为答案发布的代码。这段代码对我来说很好。谢谢

标签: python csv numpy pandas


【解决方案1】:

在阅读了很多之后,我终于实现了我想要的并成功实现了 scikit-learn 上的数据,下面给出了将 CSV 数据转换为 scikit-learn 兼容形式的代码。谢谢

import pandas as pd
r = pd.read_csv("/home/zebrafish/Desktop/ex.csv")
print r.values

clm_list = []
for column in r.columns:
    clm_list.append(column)


X = r[clm_list[0:len(clm_list)-1]].values
y = r[clm_list[len(clm_list)-1]].values

print clm_list
print X
print y

这段代码的结果正是我想要的:

['GA_ID', 'PN_ID', 'PC_ID', 'MBP_ID', 'GR_ID', 'AP_ID', 'class']

[[  0.033   6.652   6.681   0.194   0.874   3.177]
 [  0.034   9.039   6.224   0.194   1.137   3.177]
 [  0.035  10.936  10.304   1.015   0.911   4.9  ]
 [  0.022  10.11    9.603   1.374   0.848   4.566]]

[0 0 1 1]

【讨论】:

  • 您可以将列列表创建简化为:clm_list = list(r)
  • 我刚刚复制了你的代码。它运行了我的 Scikit 程序。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2020-02-13
  • 2013-09-05
相关资源
最近更新 更多