所以我在CSV文件中有大约5008行,总共有5009行标题。我在同一个脚本中创建和编写此文件。但是当我最后阅读它时,使用pandas pd.read_csv或python3的csv模块,然后打印len,它输出4967.我检查了文件中是否有任何奇怪的字符,可能会让python感到困惑,但是不要&# 39;看不到任何。所有数据都以逗号分隔。
我也在崇高中打开它,它显示5009行而不是4967。
我可以尝试使用像merge或concat这样的pandas的其他方法,但是如果python不会读取csv正确的话,那就没用了。
这是我试过的一种方法。
df1=pd.read_csv('out.csv',quoting=csv.QUOTE_NONE, error_bad_lines=False)
df2=pd.read_excel(xlsfile)
print (len(df1))#4967
print (len(df2))#5008
df2['Location']=df1['Location']
df2['Sublocation']=df1['Sublocation']
df2['Zone']=df1['Zone']
df2['Subnet Type']=df1['Subnet Type']
df2['Description']=df1['Description']
newfile = input("Enter a name for the combined csv file: ")
print('Saving to new csv file...')
df2.to_csv(newfile, index=False)
print('Done.')
target.close()
我尝试的另一种方式是
dfcsv = pd.read_csv('out.csv')
wb = xlrd.open_workbook(xlsfile)
ws = wb.sheet_by_index(0)
xlsdata = []
for rx in range(ws.nrows):
xlsdata.append(ws.row_values(rx))
print (len(dfcsv))#4967
print (len(xlsdata))#5009
df1 = pd.DataFrame(data=dfcsv)
df2 = pd.DataFrame(data=xlsdata)
df3 = pd.concat([df2,df1], axis=1)
newfile = input("Enter a name for the combined csv file: ")
print('Saving to new csv file...')
df3.to_csv(newfile, index=False)
print('Done.')
target.close()
但不管我尝试CSV文件是什么方式都是实际问题,python写得正确但没有正确读取。
编辑:最奇怪的部分是我在运行代码时绝对没有编码错误或任何错误......
Edit2:尝试在第一个代码示例中使用nrows param对其进行测试,最多可处理4000行。很快,当我指定5000行时,它只读取4967。
Edit3:用我的数据手动保存csv文件,而不是使用程序写入的文件,它读取5008行。为什么python没有正确编写csv文件?
答案 0 :(得分:2)
我也遇到了这个问题。我意识到我的一些行有开放式引号,这出于某种原因干扰了读者。
例如,某些行被写为:
GO:0000026 molecular_function "alpha-1
GO:0000027 biological_process ribosomal large subunit assembly
GO:0000033 molecular_function "alpha-1
这导致行被错误地读取。 (不幸的是,我不太了解csvreader如何工作告诉你原因。希望有人能澄清引用行为!)
我刚删除了引号,结果就算了。
已编辑:如果您想维护引号,此选项也有效:
quotechar=None
答案 1 :(得分:0)
我最好的猜测是没有看到文件是你有一些行太多或没有足够的逗号,可能是由于像foo,bar
这样的值。
请尝试设置error_bad_lines=True
。从Pandas文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html看它是否捕获了包含错误的行,我的猜测是会有41行这样的行。
error_bad_lines:布尔值,默认为True 具有太多字段的行(例如,带有太多逗号的csv行)将默认导致引发异常,并且不会返回任何DataFrame。如果为False,那么这些“坏行”将从返回的DataFrame中删除。 (仅对C解析器有效)
csv.QUOTE_NONE
选项似乎没有引用字段并在编写时用escape_char + delimiter替换当前分隔符,但是你没有粘贴你的编写代码,但在阅读时它不清楚这是什么选项呢。 https://docs.python.org/3/library/csv.html#csv.Dialect