Saya menggunakan Python 3.4 dengan IPython dan memiliki kode berikut. Saya tidak dapat membaca file csv dari URL yang diberikan:
import pandas as pd
import requests
url="https://github.com/cs109/2014_data/blob/master/countries.csv"
s=requests.get(url).content
c=pd.read_csv(s)
Saya mengalami kesalahan berikut
"Nama jalur file yang diharapkan atau objek seperti file, punya tipe"
Bagaimana cara memperbaikinya?
c=pd.read_csv(io.StringIO(s.decode("utf-8")))
tetapi Anda mendapatkan html kembali bukan file csv sehingga tidak akan berfungsi"https://raw.github.com/cs109/2014_data/blob/master/countries.csv"
.Jawaban:
Memperbarui
Dari panda
0.19.2
sekarang Anda bisa meneruskan url secara langsung .Sama seperti kesalahan yang disarankan,
pandas.read_csv
membutuhkan objek seperti file sebagai argumen pertama.Jika Anda ingin membaca csv dari sebuah string, Anda dapat menggunakan
io.StringIO
(Python 3.x) atauStringIO.StringIO
(Python 2.x) .Selain itu, untuk URL - https://github.com/cs109/2014_data/blob/master/countries.csv - Anda mendapatkan
html
respons balik , bukan csv mentah, Anda harus menggunakan url yang diberikan olehRaw
tautan di laman github untuk mendapatkan respons csv mentah, yaitu - https://raw.githubusercontent.com/cs109/2014_data/master/countries.csvContoh -
import pandas as pd import io import requests url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv" s=requests.get(url).content c=pd.read_csv(io.StringIO(s.decode('utf-8')))
sumber
c=pd.read_csv(url)
pandas
(0.23.4), tetapi saya tidak dapat memberikan url secara langsung. Jawaban ini membantu saya membuatnya bekerja.Di versi terbaru pandas (
0.19.2
) Anda dapat langsung meneruskan urlimport pandas as pd url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv" c=pd.read_csv(url)
sumber
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>
karena protokol https yang tidak dapat ditangani urllib.<urlopen error [Errno 11004] getaddrinfo failed>
Seperti yang saya komentari Anda perlu menggunakan objek StringIO dan decode yaitu
c=pd.read_csv(io.StringIO(s.decode("utf-8")))
jika menggunakan permintaan, Anda perlu mendekode sebagai. Konten mengembalikan byte jika Anda menggunakan. Teks Anda hanya perlu melewati s sepertis = requests.get(url).text
c =pd.read_csv(StringIO(s))
.Pendekatan yang lebih sederhana adalah dengan meneruskan url yang benar dari data mentah secara langsung ke
read_csv
, Anda tidak harus meneruskan file seperti objek, Anda dapat meneruskan url sehingga Anda tidak memerlukan permintaan sama sekali:c = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv") print(c)
Keluaran:
Country Region 0 Algeria AFRICA 1 Angola AFRICA 2 Benin AFRICA 3 Botswana AFRICA 4 Burkina AFRICA 5 Burundi AFRICA 6 Cameroon AFRICA ..................................
Dari dokumen :
filepath_or_buffer :
sumber
sep
fungsipd.read_csv
, seperti:pd.read_csv(StringIO(s), sep='\t')
. Jika saya menggunakan pengaturan defaultsep=None
, itu akan menimbulkan kesalahanError tokenizing data. C error: Expected 1 fields in line 6, saw 5
Masalah yang Anda hadapi adalah bahwa output yang Anda dapatkan ke variabel 's' bukanlah csv, tetapi file html. Untuk mendapatkan csv mentah, Anda harus mengubah url ke:
' https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv '
Masalah kedua Anda adalah read_csv mengharapkan nama file, kita dapat menyelesaikannya dengan menggunakan StringIO dari modul io. Masalah ketiga adalah request.get (url) .content mengirimkan aliran byte, kita dapat menyelesaikannya menggunakan teks request.get (url).
Hasil akhirnya adalah kode ini:
from io import StringIO import pandas as pd import requests url='https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv' s=requests.get(url).text c=pd.read_csv(StringIO(s))
keluaran:
>>> c.head() Country Region 0 Algeria AFRICA 1 Angola AFRICA 2 Benin AFRICA 3 Botswana AFRICA 4 Burkina AFRICA
sumber
url = "https://github.com/cs109/2014_data/blob/master/countries.csv" c = pd.read_csv(url, sep = "\t")
sumber
urlopen error [Errno 11004] getaddrinfo failed
import pandas as pd train = pd.read_table("https://urlandfile.com/dataset.csv") train.head()
import pandas as pd train = pd.read_table(r"https://urlandfile.com/dataset.csv") train.head()
sumber