DaV*_*nci 5 python csv python-3.x pandas
所以我在CSV文件中有大约5008行,总共有5009个标题.我正在同一个脚本中创建和编写此文件.但是当我最后阅读它时,使用pandas pd.read_csv或python3的csv模块,并打印len,它输出4967.我检查了文件中是否有任何奇怪的字符,可能会让python感到困惑,但看不到任何.所有数据都以逗号分隔.
我也在崇高中打开它,它显示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()
Run Code Online (Sandbox Code Playgroud)
我尝试的另一种方式是
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()
Run Code Online (Sandbox Code Playgroud)
但无论我尝试CSV文件的方式是实际问题,python正确地写它但没有正确读取它.
编辑:最奇怪的部分是我在运行代码时绝对没有编码错误或任何错误...
Edit2:尝试在第一个代码示例中使用nrows param对其进行测试,最多可处理4000行.很快,当我指定5000行时,它只读取4967行.
Edit3:用我的数据手动保存csv文件,而不是使用程序写的那个,它读取5008行.为什么python没有正确编写csv文件?
我也遇到了这个问题。我意识到我的一些台词有开放式引用,这出于某种原因干扰了读者。
例如,某些行写为:
GO:0000026 molecular_function "alpha-1
GO:0000027 biological_process ribosomal large subunit assembly
GO:0000033 molecular_function "alpha-1
Run Code Online (Sandbox Code Playgroud)
这导致行被错误读取。(不幸的是,我对 csvreader 的工作原理了解不够,无法告诉您原因。希望有人可以澄清引用行为!)
我刚刚删除了引号,结果就解决了。
编辑:如果您想保留引号,此选项也有效:
quotechar=None
Run Code Online (Sandbox Code Playgroud)
在没有看到该文件的情况下,我最好的猜测是,有些行的逗号过多或不足,可能是由于foo,bar.
请尝试设置error_bad_lines=True。从 Pandas 文档:http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.read_csv.html 来查看它是否捕获其中有错误的行,我的猜测是会有 41 个这样的行。
\n\n\nerror_bad_lines :布尔值,默认 True\n 包含太多字段的行(例如,包含太多逗号的 csv 行)默认情况下会导致引发异常,并且不会返回任何 DataFrame。如果为 False,则这些 \xe2\x80\x9cbad 行\xe2\x80\x9d 将从返回的 DataFrame 中删除。(仅对 C 解析器有效)
\n
该csv.QUOTE_NONE选项似乎在写入时不引用字段并用 escape_char + 分隔符替换当前分隔符,但您没有粘贴您的写入代码,但在读取时不清楚该选项的作用。https://docs.python.org/3/library/csv.html#csv.Dialect
| 归档时间: |
|
| 查看次数: |
3686 次 |
| 最近记录: |