Java读取csv文件作为矩阵

问题描述:

我是新来编写java代码。我有经验在脚本类型语言中编写代码。我试图重写一段代码,我在python中使用了java。Java读取csv文件作为矩阵

的Python代码如下 -

import pandas as pd 
myFile = 'dataFile' 
df = pd.DataFrame(pd.read_csv(myFile,skiprows=0)) 
inData = df.as_matrix() 

我正在寻找在Java的方法,它等效于蟒蛇as_matrix。该功能将数据帧转换为矩阵。

我曾经查找过一段时间,但无法找到像python这样的转换方法。是否有第三方库或我可以使用的线?任何方向都会帮助我很多。谢谢你堆。

+0

你到目前为止尝试过什么? [Files.readAllLines](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines%28java.nio.file.Path,%20java.nio.charset .Charset%29)可能有所帮助...也检查这个问题http://*.com/questions/4716503/reading-a-plain-text-file-in-java –

+1

你可以随时自己写方法,它wouldn花费太多时间。这是一个简单的程序,打开csv文件,逐行阅读并使用String.split()方法添加到矩阵中。如果你想要类似的东西,我可以详细阐述答案。 –

+0

我想你想读取一个CSV文件,你可以使用OpenCSV进行此操作,它可以直接将你的输入转换成bean。 – Bhavesh

你想要做的事情很简单,只需要最少的代码,因此我建议你自己编写代码。下面是一个示例实现:

List<String[]> rowList = new ArrayList<String[]>(); 
try (BufferedReader br = new BufferedReader(new FileReader("pathtocsvfile.csv"))) { 
    String line; 
    while ((line = br.readLine()) != null) { 
     String[] lineItems = line.split(","); 
     rowList.add(lineItems); 
    } 
    br.close(); 
} 
catch(Exception e){ 
    // Handle any I/O problems 
} 
String[][] matrix = new String[rowList.size()][]; 
for (int i = 0; i < rowList.size(); i++) { 
    String[] row = rowList.get(i); 
    matrix[i] = row; 
} 

这样做什么是非常简单的:它打开一个缓冲的读者,将逐行读取CSV文件中的行,并根据逗号分割他们之后的内容粘贴到字符串数组(这是你的分隔符)。然后它会将它们添加到数组列表中。我知道这可能并不完美,所以之后我将这些列表中的内容变成一个整齐的2D矩阵。希望这可以帮助。

提示:可以对这段小小的代码进行很多改进(即照顾尾随和前导空格,添加用户定义的分隔符等),但这应该是一个很好的起点。

+0

你好 - 我会试试这个。这次csv文件有16列,行可以有多少次。另外,输入文件中的列可能会不时变化。有没有一种通用的方式来做到这一点,而不是将其转换为二维数组? – usert4jju7

+0

@ usert4jju7你是什么意思的通用方式?这可能是最通用的。矩阵是根据数据的大小动态创建的,所有数据都以字符串的形式保存起来(您可以稍后操作并解析为整数,双精度等)。 –

+0

没错。都好。谢谢你堆 – usert4jju7