簡體   English   中英

來自 URL 的壓縮 csv 文件上的 pandas.read_csv 的奇怪錯誤

[英]weird error from pandas.read_csv on zipped csv file from URL

我看到過類似的問題,但它們與我遇到的並不完全相同。 我正在使用 Python 3.7 和 Pandas 0.25.0。

奇怪的是,如果我直接從這個鏈接下載這個 zip 文件,我可以通過pd.read_csv讀取它,如下所示:

pd.read_csv('publicleaderboarddata.zip')
       TeamId           TeamName       SubmissionDate    Score
0      688191  Sergey Mushinskiy  2017-05-24 12:20:34  0.06630
1      688203       DeepVoltaire  2017-05-24 12:25:03  0.06630
2      688237        RakeshNikam  2017-05-24 13:02:31  0.06512
......

但是,如果我這樣做:

this_leaderboard_df = pd.read_csv('https://www.kaggle.com/c/6649/publicleaderboarddata.zip,
                                  compression='zip')

我將收到如下BadZipFile錯誤。 為什么會發生這種情況?

-------------------------------------------------- ------------------------- BadZipFile Traceback (最近一次調用最后一次) in ----> 1 this_leaderboard_df = pd.read_csv(this_leaderboard_link, compression= 'zip') 2 this_leaderboard_df.head(e)

~/.virtualenvs/py3/lib/python3.7/site-packages/pandas/io/parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols,擠壓, 前綴, mangle_dupe_cols, dtype, engine 、轉換器、true_values、false_values、skipinitialspace、skiprows、skipfooter、nrows、na_values、keep_default_na、na_filter、verbose、skip_blank_lines、parse_dates、infer_datetime_format、keep_date_col、date_parser、dayfirst、cache_dates、迭代器、十進制塊大小、行壓縮,引用,雙引號,escapechar,注釋,編碼,方言,error_bad_lines,warn_bad_lines,delim_whitespace,low_memory,memory_map,float_precision) 683) 684 --> 685 return _read(filepath_or_buffer, kwds) 686 687 parser_f。 姓名= 姓名

~/.virtualenvs/py3/lib/python3.7/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds) 455 456 # 創建解析器。 --> 457 parser = TextFileReader(fp_or_buf, **kwds) 458 459 如果塊大小或迭代器:

~/.virtualenvs/py3/lib/python3.7/site-packages/pandas/io/parsers.py in init (self, f, engine, **kwds) 893 self.options["has_index_names"] = kwds[" has_index_names"] 894 --> 895 self._make_engine(self.engine) 896 897 def close(self):

~/.virtualenvs/py3/lib/python3.7/site-packages/pandas/io/parsers.py in _make_engine(self, engine) 1133 def _make_engine(self, engine="c"): 1134 if engine == " c": -> 1135 self._engine = CParserWrapper(self.f, **self.options) 1136 else: 1137 if engine == "python":

~/.virtualenvs/py3/lib/python3.7/site-packages/pandas/io/parsers.py in init (self, src, **kwds) 1915 kwds["usecols"] = self.usecols 1916 -> 1917 self._reader = parsers.TextReader(src, **kwds) 1918 self.unnamed_cols = self._reader.unnamed_cols 1919

pandas._libs.parsers.TextReader 中的 pandas/_libs/parsers.pyx。 cinit ()

pandas._libs.parsers.TextReader._setup_parser_source() 中的 pandas/_libs/parsers.pyx

/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py in init (self, file, mode, compression, allowZip64, compresslevel) 1223試試: 1224 if mode == 'r': -> 1225 self._RealGetContents() 1226 elif mode in ('w', 'x'): 1227 # 設置修改后的標志以便寫入中央目錄

/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py in _RealGetContents(self) 1290 raise BadZipFile("File is not a zip file") 1291 如果不是 endrec: -> 1292 raise BadZipFile("File is not a zip file") 1293 if self.debug > 1: 1294 print(endrec)

BadZipFile:文件不是 zip 文件

要下載它,您必須登錄 Kaggle。 如果您從 Kaggle 注銷並嘗試直接從鏈接下載,那么您會看到登錄表單。

pandas無法登錄此頁面,因此它使用登錄表單而不是 zip 文件獲取 HTML。

您可以使用Selenium來控制 Web 瀏覽器,然后腳本可以使用瀏覽器登錄 Kaggle 並下載文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM