繁体   English   中英

使用 Pandas 导入时如何跳过 .txt 文件中大于/小于 6 的值的行

[英]How to skip a line with more values more/less than 6 in a .txt file when importing using Pandas

我有一个 170k 行的 .txt 文件。 我正在将 txt 文件导入熊猫。

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

数据文件片段

我目前正在使用:

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

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

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] 为 [e, Nan]

所以,如果你同意的话 - 继续,不需要预处理。

如果您知道 9 列的名称,则可以执行以下操作:

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

这只会读取前 9 列。

只要你的标题行没问题,

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

这将忽略具有超过所需数量值的任何行,并且还将显示跳过了哪些此类行。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM