同时删除错误dtype的错误行和列

时间:2017-06-01 19:43:16

标签: python pandas datetime memory dataframe

我有一个包含16列和大约10亿行的大型数据集。

在这个数据集中,我面临两个主要问题

  1. 我有错误行,因为某些行的列数是more or less而不是16列
  2. 我正在使用error_rows=False这是在跳过行,但我正在执行大约30次操作,每次都花费太多时间。

    1. 其中一列是人类可读格式的DateTime。执行将人类可读转换为Unix格式的操作之一。 dtype主要是因为error_rows
    2. 而无法读取

      这给了我错误&警告dtype或插入low_memory=False

      如果我插入dtype,那么下一个错误并且警告正在转移到另一列。

      代码:

       for i in input_files:
              Tmp_Table = pd.DataFrame()
              address = direc + i
              df = pd.read_csv(address,sep=',',error_bad_lines=False)
      

      3列中的16datetime似乎列混合dtype可能是由于错误行造成的。为了避免这种情况,我使用了low_memory=False,这也给了我以下错误

      Traceback (most recent call last):
        File "FirstTable.py", line 20, in <module>
          Tmp_Table['Datetime'] = df['Tweeted Datetime'].apply(lambda x: UnixFormat(str(x)))
        File "/usr/local/lib/python2.7/dist-packages/pandas/core/series.py", line 2355, in apply
          mapped = lib.map_infer(values, f, convert=convert_dtype)
        File "pandas/_libs/src/inference.pyx", line 1569, in pandas._libs.lib.map_infer (pandas/_libs/lib.c:66440)
        File "FirstTable.py", line 20, in <lambda>
          Tmp_Table['Datetime'] = df['Tweeted Datetime'].apply(lambda x: UnixFormat(str(x)))
        File "/home/lakshmi/Desktop/Twitter_Code_Ubuntu/Functions.py", line 41, in UnixFormat
          unixtime = previous
      UnboundLocalError: local variable 'previous' referenced before assignment
      

      因此,我试图找到一种简单快捷的方法,从数据集中一次性删除这些错误行,这样我的下一步操作就不会那么多了。

      任何人都可以建议我这样做的最好方法..提前致谢。

1 个答案:

答案 0 :(得分:2)

当你在谈论Unix格式时,我假设你在unix系统上。 如果是这样,您可以使用awk预处理数据。

如果你的分隔符是标签:

awk 'NF==16{print}{}' data > data_edit

如果您的分隔符是逗号:

awk -F',' 'NF==16{print}{}' data > data_edit

awk将检查列数,并且只会筛选出等于16的列。之后,只需将它们存储到data_edit中

现在你应该留下一个包含16列的数据集,希望这可以解决你的大部分问题。

如果要检查文件中的列数:

awk -F',' '{print NF}' data | sort | uniq -c

这将打印出两列:出现次数 - 列数