Como eu comentei, você precisa usar um objeto StringIO e decodificar, ou seja, c=pd.read_csv(io.StringIO(s.decode("utf-8")))
se estiver usando solicitações, precisará decodificar como .content retorna bytes se você usou .text, você só precisará passar s como está s = requests.get(url).text
c = pd.read_csv(StringIO(s))
.
Uma abordagem mais simples é passar o URL correto dos dados brutos diretamente para read_csv
, você não precisa passar um arquivo como objeto, pode passar um URL para não precisar de solicitações:
c = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv")
print(c)
Resultado:
Country Region
0 Algeria AFRICA
1 Angola AFRICA
2 Benin AFRICA
3 Botswana AFRICA
4 Burkina AFRICA
5 Burundi AFRICA
6 Cameroon AFRICA
..................................
Dos documentos :
filepath_or_buffer :
string ou identificador de arquivo / StringIO A string pode ser um URL. Os esquemas de URL válidos incluem http, ftp, s3 e arquivo. Para URLs de arquivo, é esperado um host. Por exemplo, um arquivo local pode ser o arquivo: //localhost/path/to/table.csv
c=pd.read_csv(io.StringIO(s.decode("utf-8")))
, mas você está recebendo html volta não um arquivo CSV para que ele não vai funcionar