【问题标题】:Java read csv file as matrixJava将csv文件读取为矩阵
【发布时间】:2016-03-04 08:37:38
【问题描述】:

我是这样编写 java 代码的新手。我有使用脚本类型语言编写代码的经验。我正在尝试用 java 重写我在 python 中的一段代码。

下面的 Python 代码 -

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

我在 java 中寻找一种等效于 python 中的as_matrix 的方法。该函数将数据框转换为矩阵。

我确实查找了一段时间,但找不到像在 python 中那样进行转换的方法。我可以使用那些线上的第 3 方库或其他东西吗?任何方向都会对我有很大帮助。谢谢大家。

【问题讨论】:

  • 到目前为止你尝试了什么???? Files.readAllLines 可能会有所帮助...也请检查此问题stackoverflow.com/questions/4716503/…
  • 你可以自己写方法,不会花太多时间。这是一个打开 csv 文件、逐行读取并使用 String.split() 方法添加到矩阵的简单过程。如果你想要这样的东西,我可以详细说明。
  • 我想你想读取一个CSV文件,你可以使用OpenCSV,它可以直接将你的输入转换成bean。
  • 尝试使用这里的方法:stackoverflow.com/questions/16784014/…

标签: java python


【解决方案1】:

您想要做的事情非常简单,并且只需要您编写最少的代码,因此我建议您自己编写代码。这是一个示例实现:

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 矩阵。希望这可以帮助。

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

【讨论】:

  • 你好 - 我会试试这个。 csv 文件这次有 16 列,行数可以是多少。此外,输入文件中的列可能会不时变化。有没有一种通用的方法可以做到这一点,而不是将其转换为二维数组?
  • @usert4jju7 通用方式是什么意思?这是最通用的。矩阵是根据数据的大小动态创建的,所有数据都以字符串的形式保存在其中(您可以稍后对其进行操作和解析为整数、双精度数等)。
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 2013-06-23
  • 2022-07-05
  • 2023-03-08
  • 2020-11-27
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多