似乎error_bad_lines
和warn_bad_lines
参数仅适用于包含太多列但不包含太少列的行。是否有一种简单的方法可以消除数据帧中的所有短列,最好是在读取它时?
例如,以下工作很好,但是偶尔会有一个包含文本而不是时间戳的列列。这可以防止将数据帧转换为所需的日期时间索引格式。
data = pd.read_table(filepath, sep='\t', parse_dates=True, index_col='Date/Time', error_bad_lines=True)
然后数据框类似于下图:
我可以使用df.iterrows()
遍历行并清除坏行,但我觉得必须有更好/更快/更性感的方式,因为大熊猫很棒。
思想/想法?
2014年2月27日: 截至目前,我正在使用以下策略完成此任务:
True
temp
列为True
看起来像这样:
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 :(得分: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)