熊猫read_table()-如何使用多种自定义NA格式?

时间:2018-09-06 00:51:49

标签: python pandas

我有以下形式的数据:

000000008,2, 1,000000009,H,9740,000000008
000000009,1, 1,000000009,G,8790,000000008
000000010,1, 1,000000009,A,4081,000000008
000000011,2, 1,        ., ,   .,000000011
000000012,3, 1,        ., ,   .,        .
000000013,2, 1,        ., ,   .,000000013

您会看到最后3行中缺少一些值,这就是问题所在:如何转换为正确的数据类型并处理大型数据集的这些情况?

对于某些列,如果缺少该值,我想排除那些行,对于其他一些列,我想将其设置为某个值。

这是我的代码:

inputDBFilename = inputDir + 'testData.txt'

df = pd.read_table(inputDBFilename, delimiter=',',
                   names=('A', 'B', 'C', 'D', 'E', 'F', 'G'),
                   na_values=['        .'],
                   dtype={'A': np.uint64, 'B': np.uint8, 'C': np.uint8, 'D': np.uint64,
                          'E': np.str, 'F': np.uint16, 'G': np.uint64})

我遇到了错误:

ValueError: Integer column has NA values in column 3

但是为什么会出错?它应该期望那些NA值!

1 个答案:

答案 0 :(得分:0)

阅读CSV时,您可以直接指定您的消费者NA值格式。如果NA值字符串类型不止一种,请为na_values参数提供一个列表

In [62]:
T = '''000000008,2, 1,000000009,H,9740,000000008
000000009,1, 1,000000009,G,8790,000000008
000000010,1, 1,000000009,A,4081,000000008
000000011,2, 1,        ., ,   .,000000011
000000012,3, 1,        ., ,   .,        .
000000013,2, 1,        ., ,   .,000000013'''

from io import StringIO
df = pd.read_csv(StringIO(T), na_values=['        .', '   .'], header=None)
df

Out[62]:
    0  1  2    3  4       5     6
0   8  2  1  9.0  H  9740.0   8.0
1   9  1  1  9.0  G  8790.0   8.0
2  10  1  1  9.0  A  4081.0   8.0
3  11  2  1  NaN        NaN  11.0
4  12  3  1  NaN        NaN   NaN
5  13  2  1  NaN        NaN  13.0