java读取txt时数据缺失的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读取txt时数据缺失的处理相关的知识,希望对你有一定的参考价值。

我的txt文件是一个缺失了某一个数的m*n矩阵。如何在保证缺失位存在的情况下,把它存入到二维数组中?
例如
12 22 45

13 11 20 30
11 10 99 87
这个矩阵第一行第三个数字缺失了,如何存入二维数组并标记出缺失位呢?
矩阵中间那行空行是我手滑摁了回车 这个不需要考虑。谢谢各位了!

首先得看你要用什么数据结构表示矩阵。
如果让我自由设计的话,我会用List<List<Double>>表示矩阵,空缺元素用Double.NaN表示。

如果一定要用Integer的话,就用null表示空缺。
参考技术A 用空字符串表示缺失的位置
如["1","3","","4"] 第三个位置为空字符串 则表示 第三个位置是缺失的位置追问

在从txt读入到二维数组的过程中要怎么做啊

追答

InputStream is=null;
is=new FileInputStream(“txt文件路径”);
InputStreamReader isr = new InputStreamReader(is,"utf-8或者gbk");
BufferedReader bfReader=new BufferedReader(isr);
String line=null;
while((line=bfReader.readLine())!=null)
//log.info("行数据:"+line);
String[] data=line.split("空格");//取得每行的数据

处理 Pandas read_csv 中的缺失数据

【中文标题】处理 Pandas read_csv 中的缺失数据【英文标题】:Dealing with missing data in Pandas read_csv 【发布时间】:2017-02-10 06:28:42 【问题描述】:

在将CSV数据导入pandas DataFrame时,我还没有找到令人满意的解决方案。

我有数据集,我事先不知道列或数据类型是什么。我希望 pandas 在推断如何读取数据方面做得更好。

我没有找到任何真正有用的na_values=... 组合。

考虑以下 csv 文件:

no_holes.csv

letter,number
a,1
b,2
c,3
d,4

with_holes.csv

letter,number
a,1
,2
b, 
,4

empty_column.csv

letters,numbers
,1
,2
,3
,4

with_NA.csv

letter,number
a,1
b,NA
NA,3
d,4

当我将它们读入 DataFrame 时会发生以下情况(代码如下):

**no holes**
  letter  number
0      a       1
1      b       2
2      c       3
3      d       4
letter    object
number     int64
dtype: object

**with holes**
  letter number
0      a      1
1    NaN      2
2      b       
3    NaN      4
letter    object
number    object
dtype: object

**empty_column**
   letters  numbers
0      NaN        1
1      NaN        2
2      NaN        3
3      NaN        4
letters    float64
numbers      int64
dtype: object

**with NA**
  letter  number
0      a     1.0
1      b     NaN
2    NaN     3.0
3      d     4.0
letter     object
number    float64
dtype: object

有没有办法告诉熊猫假设空值是object 类型?我试过na_values=[""]

demo_holes.py

import pandas as pd

with_holes = pd.read_csv("with_holes.csv")
no_holes = pd.read_csv("no_holes.csv")
empty_column = pd.read_csv("empty_column.csv")
with_NA = pd.read_csv("with_NA.csv")

print("\n**no holes**")
print(no_holes.head())
print(no_holes.dtypes)
print("\n**with holes**")
print(with_holes.head())
print(with_holes.dtypes)
print("\n**empty_column**")
print(empty_column.head())
print(empty_column.dtypes)
print("\n**with NA**")
print(with_NA.head())
print(with_NA.dtypes)

【问题讨论】:

尝试na_values=" " 与一个空格字符。 【参考方案1】:

你想使用参数skipinitialspace=True

设置

no_holes = """letter,number
a,1
b,2
c,3
d,4"""

with_holes = """letter,number
a,1
,2
b, 
,4"""

empty_column = """letters,numbers
,1
,2
,3
,4"""

with_NA = """letter,number
a,1
b,NA
NA,3
d,4"""

from StringIO import StringIO
import pandas as pd

d1 = pd.read_csv(StringIO(no_holes), skipinitialspace=True)
d2 = pd.read_csv(StringIO(with_holes), skipinitialspace=True)
d3 = pd.read_csv(StringIO(empty_column), skipinitialspace=True)
d4 = pd.read_csv(StringIO(with_NA), skipinitialspace=True)

pd.concat([d1, d2, d3, d4], axis=1,
          keys=['no_holes', 'with_holes',
                'empty_column', 'with_NA'])


如果您希望那些NaNs 成为'',请使用fillna

d1 = pd.read_csv(StringIO(no_holes), skipinitialspace=True).fillna('')
d2 = pd.read_csv(StringIO(with_holes), skipinitialspace=True).fillna('')
d3 = pd.read_csv(StringIO(empty_column), skipinitialspace=True).fillna('')
d4 = pd.read_csv(StringIO(with_NA), skipinitialspace=True).fillna('')

pd.concat([d1, d2, d3, d4], axis=1,
          keys=['no_holes', 'with_holes',
                'empty_column', 'with_NA'])

【讨论】:

以上是关于java读取txt时数据缺失的处理的主要内容,如果未能解决你的问题,请参考以下文章

Java 读取文件中文乱码处理 Java IO读取txt文件内容的正确姿势避免中文乱码

java 多线程读取txt 文件

java按行读取txt文件并与数据库表中的内容进行匹配处理(问题好像比较复杂哈)

java读取、修改、写入txt文件

用java读取txt文件中的中文写入数据库出现中文乱码,怎么解决?

用java读取txt文件中的中文写入数据库出现中文乱码,怎么解决?