2014-02-25 52 views
0

它好像在error_bad_lineswarn_bad_lines参数仅适用于包含太多的列,不列太少行。是否有一种简单的方法可以消除数据框中的所有短列,最好是在阅读时使用?消除短行与read_table()使用熊猫

例如,下面的伟大工程,但每一个现在,再有就是包含文本,而不是一个时间戳的一列列。这可以防止将数据帧转换为所需的日期时间索引格式。

data = pd.read_table(filepath, sep='\t', parse_dates=True, index_col='Date/Time', error_bad_lines=True) 

数据帧则类似于下面的图片: enter image description here

我可以通过使用df.iterrows()并剔除坏行的行迭代,但我觉得必须有一个更好/更快/更性感的方式熊猫看起来很棒。

想法/想法?

2014年2月27日: 截至目前,我完成这个使用以下策略:

  1. 定义函数返回True如果索引是一个有效的时间戳
  2. 创建在一个临时列包含索引DF
  3. 应用自定义函数来临时列
  4. 保持其temp列是True
  5. 仅列

看起来是这样的:

def valid_row(ind): 
    return True if (type(pd.to_datetime(ind)) is pd.tslib.Timestamp) else False 

data = pd.read_table(runDir + "VapsTest_20130429.txt", sep='\t', parse_dates=True, index_col='Date/Time', error_bad_lines=True, keep_default_na=False) 

data['temp'] = data.index 
data['temp'] = data['temp'].apply(valid_row) 
data = data[data['temp'] == True] 

data.index = pd.to_datetime(data.index) 

这个过程能够完成任务,并给我留下一个干净的,用数据帧索引的日期时间。必须有更好的方法,对吧?

回答

0

您可以使用简称的官方文档的选项:

* error_bad_lines *:有太多的字段行(例如用逗号过多一个CSV线)默认情况下将导致异常待提高。

* keep_default_na *:bool,默认为True,如果指定了na_values并且keep_default_na为False,则默认的NaN值将被覆盖,否则它们将被附加到。

,你可以解决这个问题:

data = pd.read_table(filepath, sep='\t', parse_dates=True, index_col='Date/Time', error_bad_lines=False,keep_default_na=False) 
+0

感谢您的想法。这似乎删除与NaN作为索引(良好)的行,尽管该行似乎仍然存在(只是空的);我不确定未来这是否会成为问题。但主要问题仍然存在。如上所见,一些行在索引中有文本,我需要去掉那些!我可以遍历每一行,尝试转换为时间戳并删除,如果失败,但似乎没有必要。 –