在导入数据时处理Null

时间:2014-08-12 09:47:35

标签: python pandas

如何在导入数据时抑制空白行? 对于例如在以下示例中,如果字符串中的任何位置有空行,则read_csv方法将失败。 我可以在导入数据之前删除空白行。但我想知道是否有任何方法可以使用pandas函数来做同样的事情。

from StringIO import StringIO
import pandas as pd
import datetime as dt

parse = lambda x: dt.datetime.strptime(str(x), '%y%m%d')

u_cols = ['page_id','web_id']
audit_trail = StringIO('''3|120814
7|120813

11|120101
15|111231
19|121223
''')

df11 = pd.read_csv(audit_trail, sep="|", names = u_cols , parse_dates=[1], date_parser = parse)

我知道dropna(how ='any')但我在阅读数据时寻找解决方案,而不是在创建数据帧之后。

更新:创建数据帧时是否支持异常处理?对于例如有以下可能吗?

parser=try: lambda x: dt.datetime.strptime(str(a), '%y%m%d'); 
except ValueError: pass

2 个答案:

答案 0 :(得分:3)

删除日期解析器,pandas可以很好地解析你的日期

In [63]:

import pandas as pd
import datetime as dt
import io

u_cols = ['page_id','web_id']
audit_trail = io.StringIO('''3|120814
7|120813

11|120101
15|111231
19|121223
''')

df11 = pd.read_csv(audit_trail, sep="|", names = u_cols , parse_dates=[1])
df11

Out[63]:
   page_id     web_id
0        3 2012-08-14
1        7 2012-08-13
2      NaN        NaT
3       11 2012-01-01
4       15 2011-12-31
5       19 2012-12-23

In [65]:

df11.dtypes
Out[65]:
page_id           float64
web_id     datetime64[ns]
dtype: object

您可以向日期解析器添加异常处理:

In [80]:

import pandas as pd
import datetime as dt
import io

def func(x):
    try: 
        return dt.datetime.strptime(x, '%y%m%d')
    except ValueError:
        pass

u_cols = ['page_id','web_id']
audit_trail = io.StringIO('''3|120814
7|120813

11|120101
15|111231
19|121223
''')

df11 = pd.read_csv(audit_trail, sep="|", names = u_cols , parse_dates=[1], date_parser = func)
df11

Out[80]:
   page_id     web_id
0        3 2012-08-14
1        7 2012-08-13
2      NaN        NaT
3       11 2012-01-01
4       15 2011-12-31
5       19 2012-12-23

它会正常工作

答案 1 :(得分:1)

问题不在于熊猫,而在你的方法中。该方法不必是lambda,您可以将其定义为对数据具有鲁棒性,这是一个例子:

def parse(x):
    try:
        return dt.datetime.strptime(str(x), '%y%m%d')
    except ValueError:
        return pd.NaT

这适用于您的代码示例。

(当然,正如其他评论中提到的那样答案 - 熊猫可以处理你的日期。对于没有这种情况的情况使用方法