Solución:
En la última versión de pandas (0.19.2
) puede pasar directamente la URL
import pandas as pd
url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
c=pd.read_csv(url)
ACTUALIZACIÓN: De pandas 0.19.2
ahora puedes solo aprobar read_csv()
la URL directamente, aunque eso fallará si requiere autenticación.
Para versiones antiguas de pandas, o si necesita autenticación, o por cualquier otro motivo de tolerancia a fallos HTTP:
Usar pandas.read_csv
con un objeto similar a un archivo como primer argumento.
-
Si desea leer el csv de una cadena, puede usar
io.StringIO
. -
Para la URL
https://github.com/cs109/2014_data/blob/master/countries.csv
, usted obtienehtml
respuesta, no crudo csv; debe utilizar la URL proporcionada por elRaw
enlace en la página de github para obtener una respuesta csv sin procesar, que eshttps://raw.githubusercontent.com/cs109/2014_data/master/countries.csv
Ejemplo:
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')))
Notas:
en Python 2.x, el objeto string-buffer era StringIO.StringIO
Como comenté, debe usar un objeto StringIO y decodificar, es decir c=pd.read_csv(io.StringIO(s.decode("utf-8")))
si usa solicitudes, debe decodificar a medida que el contenido devuelve bytes si usó .text, solo necesitaría pasar s como está s = requests.get(url).text
c = pd.read_csv(StringIO(s))
.
Un método más sencillo es pasar la URL correcta del crudo datos directamente a read_csv
, usted no tiene que pasar un archivo como un objeto, puede pasar una URL para que no necesite solicitudes en absoluto:
c = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv")
print(c)
Producción:
Country Region
0 Algeria AFRICA
1 Angola AFRICA
2 Benin AFRICA
3 Botswana AFRICA
4 Burkina AFRICA
5 Burundi AFRICA
6 Cameroon AFRICA
..................................
De los documentos:
filepath_or_buffer :
cadena o identificador de archivo / StringIO La cadena podría ser una URL. Los esquemas de URL válidos incluyen http, ftp, s3 y file. Para las URL de archivos, se espera un host. Por ejemplo, un archivo local podría ser file: //localhost/path/to/table.csv