我有以下形式的数据:
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值!
答案 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