Python CSV阅读器
我有一个CSV,它来自一个在文件顶部有大量垃圾的系统,因此标题行大约是第5行,甚至可能是第14行,这取决于报告发出的胡言乱语 我曾经用过:Python CSV阅读器,python,csv,Python,Csv,我有一个CSV,它来自一个在文件顶部有大量垃圾的系统,因此标题行大约是第5行,甚至可能是第14行,这取决于报告发出的胡言乱语 我曾经用过: idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2) 要遍历少于2列的行,当它到达列标题(其中有12列)时,它将停止,然后我可以在读取CSV文件时使用idx和skiprows 系统已经有了更新,有人认为最好让CSV文件有效,在他们的胡言乱语之后添加11个空白逗号来对齐
idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2)
要遍历少于2列的行,当它到达列标题(其中有12列)时,它将停止,然后我可以在读取CSV文件时使用idx和skiprows
系统已经有了更新,有人认为最好让CSV文件有效,在他们的胡言乱语之后添加11个空白逗号来对齐头计数
现在我有了一个CSV,比如:
sadjfhasdkljfhasd,,,,,,,,,,
dsfasdgasfg,,,,,,,,,,
time,date,code,product
等等
我试过:
idx = next(idx for idx, row in enumerate(csvreader) if row in (None, "") > 2)
但我认为这是熊猫的事情,它只是失败了
关于如何到达标题行有什么想法吗
代码:
lmf = askopenfilename(filetypes=(("CSV Files",".csv"),("All Files","*.*")))
# Section gets row number where headers start
with open(lmf, 'r') as fin:
csvreader = csv.reader(fin)
print(csvreader)
input('hold')
idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2)
# Reopens file parsing the number for the row headers
lmkcsv = pd.read_csv(lmf, skiprows=idx)
lm = lm.append(lmkcsv)
print(lm)
删除起始行,做一些逻辑工作,比如检查多个“exist”或某个单词,怎么样。比如:
f = open("target.txt","r+")
d = f.readlines()
f.seek(0)
for i in d:
if "sadjfhasdkljfhasd" not in i:
f.write(i)
f.truncate()
f.close()
之后,请正常读取该文件。由于您的csv现在是一个有效文件,并且您只想过滤掉没有一定数量列的标题行,因此您可以直接在pandas中执行此操作
import pandas as pd
minimum_cols_required = 3
lmkcsv = pd.read_csv()
lmkcsv = lmkcsv.dropna(thresh=minimum_cols_required, inplace=True)
如果您的csv数据也有很多空值,并且这些值被捕获在此阈值中,则只需稍微修改您的代码:
idx = next(idx for idx, row in enumerate(csvreader) if len(set(row)) > 3)
我不确定在什么情况下None会返回,所以setrow应该这样做。如果任何内容的标题都是重复的,请执行以下操作:
from collections import Counter
# ...
idx = next(idx for idx, row in enumerate(csvreader) if len(row) - Counter(row)[''] > 2)
如何确定标题行?第一个,其中所有值都是非空的?以时间开始的那个?这是怎么回事?如果行中无,>2?这是熊猫的事吗,这将被解释为None中的行,None,>2,这将始终为false。因此,如果有N个不相关的行,OP将不得不进行N个比较?如果行中的值每次都不一样怎么办?你会怎么理解呢?谢谢,我只是以防万一,因为我不知道数据集通常会是什么样子。