【问题标题】:How to skip a line with more values more/less than 6 in a .txt file when importing using Pandas使用 Pandas 导入时如何在 .txt 文件中跳过大于/小于 6 的值的行
【发布时间】:2020-04-17 01:47:26
【问题描述】:

我有一个包含 170k 行的 .txt 文件。我正在将 txt 文件导入 pandas。

每一行都有多个用逗号分隔的值。
我想提取具有 9 个值的行。

我目前正在使用:

data = pd.read_csv('uart.txt', sep=",")

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果你知道这 9 列的名称,你可以这样做:

    df = pd.read_csv('uart.txt', names='abcdefghj')

    这只会读取前 9 列。

    【讨论】:

      【解决方案2】:

      您应该尝试的第一件事 - 预处理文件。

      import csv
      with open('uart.txt', 'r') as inp, open('uart_processed.txt', 'w') as outp:
          inp_csv = csv.reader(inp)
          outp_csv = csv.writer(outp)
          for row in inp_csv:
              if len(row) == 9:
                  outp_csv.writerow(row)
      

      可以有更有效的方法来做到这一点,但这是您可以做的最简单的事情,它会完全删除无效行。

      正如@ksooklall 回答的那样,如果您为了简单起见只需要 2 列:

      • [a,b,c,d] 将在您的 DataFrame 中作为 [a, b]
      • [e] as [e, Nan]

      所以,如果您同意,请继续,无需预处理。

      【讨论】:

        【解决方案3】:

        只要你的标题行没问题,

        你可以使用data = pd.read_csv('uart.txt', sep=",", error_bad_lines=False, warn_bad_lines=True)

        这将忽略任何超过所需值的行,并且还会显示跳过了哪些行。

        如果您知道其余的实际数据(即有 9 个值的行)中没有任何缺失值,那么您可以在读入后dropna 删除所有少于 9 条记录的行.即(data = pd.read_csv('uart.txt', sep=",", error_bad_lines=False, warn_bad_lines=True).dropna()

        但是,如果有 9 个值的记录可以有 NA(例如 242,2421,,,,,,,,1),那么我认为 Pandas 中没有内置方法,您必须预先- 在读入之前处理 csv。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          • 2021-09-30
          • 2013-07-23
          相关资源
          最近更新 更多