如何在导入数据时抑制空白行? 对于例如在以下示例中,如果字符串中的任何位置有空行,则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
答案 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
这适用于您的代码示例。
(当然,正如其他评论中提到的那样答案 - 熊猫可以处理你的日期。对于没有这种情况的情况使用方法