如何读取缺少值和'delim_whitespace = True'的csv文件?

时间:2019-06-17 12:50:21

标签: python pandas

我想知道是否可以简单地删除任何引起错误的行而不是引发异常。

我的问题与处理这样的文本文件有关:

111 aaa 222 bbb
1   a   2   b
11      22

由于空格的数量不同,因此我在read_csv函数中使用了选项'delim_whitespace = True'。但是,我还通过“ dtype”参数明确指定了数据类型。

大熊猫自然会将值22移至第三行的第二列(我不相信有一种方法可以说服它确实好于第三行)。但是,由于第二列应该是字符串,因此会引发异常。

我知道可以使用'converters'参数解决此问题,但是由于数据文件很大(数百万行),我担心性能。

因此,可以删除行号或列数较小的行(对于更高的行,则为'error_bad_lines'),或者在重新键入期间删除任何会引起异常的行。还是您还有其他想法?

1 个答案:

答案 0 :(得分:1)

使用pandas.read_fwf读取文件。这将用NaN值填充空字符串。

= ^ .. ^ =

import pandas as pd

data = pd.read_fwf('data.txt', header=None)
data.columns = ["c1", "c2", "c3", "c4"]

加载:

    c1   c2   c3   c4
0  111  aaa  222  bbb
1    1    a    2    b
2   11  NaN   22  NaN

接下来只需删除具有NaN值的行:

out_data = data.dropna()

输出:

    c1   c2   c3   c4
0  111  aaa  222  bbb
1    1    a    2    b