【发布时间】:2020-04-17 01:47:26
【问题描述】:
我有一个包含 170k 行的 .txt 文件。我正在将 txt 文件导入 pandas。
每一行都有多个用逗号分隔的值。
我想提取具有 9 个值的行。
我目前正在使用:
data = pd.read_csv('uart.txt', sep=",")
【问题讨论】:
我有一个包含 170k 行的 .txt 文件。我正在将 txt 文件导入 pandas。
每一行都有多个用逗号分隔的值。
我想提取具有 9 个值的行。
我目前正在使用:
data = pd.read_csv('uart.txt', sep=",")
【问题讨论】:
如果你知道这 9 列的名称,你可以这样做:
df = pd.read_csv('uart.txt', names='abcdefghj')
这只会读取前 9 列。
【讨论】:
您应该尝试的第一件事 - 预处理文件。
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 列:
所以,如果您同意,请继续,无需预处理。
【讨论】:
只要你的标题行没问题,
你可以使用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。
【讨论】: