[英]Pandas read_csv() conditionally skipping header row
我正在尝试读取csv
文件,但我的 csv 文件不同。 有些有不同的格式,有些有其他的。 我正在尝试添加控件,这样我就不需要编辑我的代码或我的输入文件。
我的问题是,其中一些 csv 文件在列标题上方有一行字符串。 一个例子:
Created on 12-11-2018,CryptoDataDownload.com
Date,Symbol,Open,High,Low,Close,Volume From,Volume To
2018-12-11 11-AM,ADABTC,8.6e-06,8.61e-06,8.55e-06,8.57e-06,301141.7,2.59
2018-12-11 10-AM,ADABTC,8.69e-06,8.72e-06,8.6e-06,8.6e-06,236949.63,2.05
如果我导入它,分隔符将使用第一行并将文件分成两列,如Created on 12-11-2018
和CryptoDataDownload.com
。
这就是df.head()
的样子:
Created on 12-11-2018 CryptoDataDownload.com
Date Symbol Open High Low Close Volume From Volume To
2018-12-11 11-AM ADABTC 8.6e-06 8.61e-06 8.55e-06 8.57e-06 301141.7 2.59
2018-12-11 10-AM ADABTC 8.69e-06 8.72e-06 8.6e-06 8.6e-06 236949.63 2.05
2018-12-11 09-AM ADABTC 8.7e-06 8.7e-06 8.62e-06 8.69e-06 509311.39 4.41
2018-12-11 08-AM ADABTC 8.69e-06 8.7e-06 8.63e-06 8.7e-06 111367.34 0.9656
我想检查这个文件是否有这一行,如果有,就跳过它。
我怎样才能做到这一点?
如果CSV文件中的标题遵循类似的模式,您可以执行一些简单的操作,例如在确定是否跳过第一行之前嗅出第一行。
filename = '/path/to/file.csv'
skiprows = int('Created in' in next(open(filename)))
df = pd.read_csv(filename, skiprows=skiprows)
好的做法是使用上下文管理器,所以你也可以这样做:
filename = '/path/to/file.csv'
skiprows = 0
with open(filename, 'r+') as f:
for line in f:
if line.startswith('Created '):
skiprows = 1
break
df = pd.read_csv(filename, skiprows=skiprows)
在pandas read_csv命令中使用'comment'参数时,可以跳过以特定字符开头的行。 在您的情况下,您可以使用以下代码跳过以“C”开头的行:
filename = '/path/to/file.csv'
pd.read_csv(filename, comment = "C")
这对我有用:
import os
import requests
CSV_URL = '...'
with open(os.path.split(CSV_URL)[1], 'wb') as f, requests.get(CSV_URL, stream=True) as r:
lines = 0
for line in r.iter_lines():
if lines == 0:
lines += 1
else:
f.write(line+'\n'.encode())
对于您的情况:
import os
import requests
CSV_URL = '...'
with open(os.path.split(CSV_URL)[1], 'wb') as f, requests.get(CSV_URL, stream=True) as r:
for line in r.iter_lines():
if line[:11] != 'Created on ':
f.write(line+'\n'.encode())
改编自: stackoverflow
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.