使用Pandas消除read_table()消除短行

时间:2014-02-25 23:54:44

标签: python pandas

似乎error_bad_lineswarn_bad_lines参数仅适用于包含太多列但不包含太少列的行。是否有一种简单的方法可以消除数据帧中的所有短列,最好是在读取它时?

例如,以下工作很好,但是偶尔会有一个包含文本而不是时间戳的列列。这可以防止将数据帧转换为所需的日期时间索引格式。

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. 将自定义函数应用于临时列
  5. 仅保留temp列为True
  6. 的列

    看起来像这样:

    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)
    

    这个过程完成了工作,并为我留下了一个带有日期时间索引的干净数据框。绝对必须有更好的方法,对吧?

1 个答案:

答案 0 :(得分: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)