2016-12-25 77 views
1

我使用的是D类指定每个列的数据类型读一堆CSV文件大熊猫遗漏值:手柄采用D型读取文件

dict_tpye = {"columns_1":"int","column_2":"str"} 
pd.read_csv(path,dtype=dict_tpye) 

我与做面临的问题这使得非浮点值的列有缺失的行,这会导致上升和错误。我该如何处理?

我想在这种情况下使用默认值,例如数字值为0,名称为空字符串。

+1

'NaN'只能用float dtype表示,所以您想要什么?你只是说明你有问题而没有说明你的愿望。您可以替换这些缺失的值或将其删除 – EdChum

+0

@EdChum我想为这种情况使用默认值,例如数字值为0,名称为空字符串。 –

回答

1

考虑变换器参数,它使用一个字典,一个用户定义的函数来进口列的映射结果。用户定义的方法下方使用内置的isdigit(),如果字符串中的所有字符都是数字,则返回True;如果至少有一个字符不是数字,则返回False;和isalpha()作为字符串对应。根据需要进行调整,特别是在字符串中,因为您可能允许在其内容中输入数字:

import pandas as pd 

cleanFloat = lambda x: float(x if x.isdigit() else 0) 
cleanString = lambda x: str(x if x.isalpha() else '') 

dict_convert = {1:cleanFloat, 2:cleanString,} 
dict_type = {"columns_1":"int","column_2":"str"} 

df = pd.read_csv('Input.csv', converters=dict_convert, dtype=dict_type) 
0

填充缺少w/a占位符的一种方法是在将数据读入DataFrame后执行填充。像这样

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import numpy as np 
import pandas as pd 

# csv data with missing data in each of the 2 columns 
csv_data = """number,colour 
3,blue 
12, 
2, 
2,red 
,yellow 
6,yellow 
14,purple 
4,green 
18,green 
11,orange""" 

df = pd.read_csv(pd.io.parsers.StringIO(csv_data)) 

df.number = df.number.fillna(-999) # fill missing numbers w/ -999 
df.colour = df.colour.fillna('UNK') # fill missing categorical w/ UNK 

print df 

# In [1]: run test.py 
# number colour 
# 0  3.0 blue 
# 1 12.0  UNK 
# 2  2.0  UNK 
# 3  2.0  red 
# 4 -999.0 yellow 
# 5  6.0 yellow 
# 6 14.0 purple 
# 7  4.0 green 
# 8 18.0 green 
# 9 11.0 orange