পান্ডারা ইউআরএল থেকে পড়া_সিএসভি


138

আমি আইপথন সহ পাইথন ৩.৪ ব্যবহার করছি এবং নিম্নলিখিত কোড রয়েছে। আমি প্রদত্ত ইউআরএল থেকে একটি সিএসভি-ফাইল পড়তে অক্ষম:

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)

আমি নিম্নলিখিত ত্রুটি আছে

"প্রত্যাশিত ফাইল পাথের নাম বা ফাইলের মতো বস্তু, টাইপ পেয়েছে"

আমি এটা কিভাবে ঠিক করবো?


আপনার মতো কিছু দরকার c=pd.read_csv(io.StringIO(s.decode("utf-8")))তবে আপনি এইচটিএমএল ফিরে আসছেন কোনও সিএসভি ফাইল নয় এটি কাজ করছে না
প্যাডেরিক কানিংহাম

3
আপনি যে URL চান তা আমি মোটামুটি নিশ্চিত "https://raw.github.com/cs109/2014_data/blob/master/countries.csv"
kylie.a

@ ইওনোম, সঠিক হিসাবে আরও জনপ্রিয় উত্তরটি বেছে নিয়েছে
ইবোদি

উত্তর:


166

হালনাগাদ

পান্ডাস থেকে 0.19.2আপনি এখন সরাসরি ইউআরএল পাস করতে পারেন ।


ত্রুটিটি যেমন প্রস্তাব করে, pandas.read_csvতেমনি প্রথম যুক্তি হিসাবে একটি ফাইলের মতো বস্তুর প্রয়োজন।

আপনি যদি স্ট্রিং থেকে সিএসভি পড়তে চান তবে আপনি io.StringIO(পাইথন ৩.x) বা StringIO.StringIO(পাইথন ২.x) ব্যবহার করতে পারেন ।

এছাড়াও, ইউআরএলটির জন্য - https://github.com/cs109/2014_data/blob/master/countries.csv - আপনি কোনও htmlপ্রতিক্রিয়া পাচ্ছেন , কাঁচা সিএসভি নয়, আপনার Rawগিথুব পৃষ্ঠায় লিঙ্কের দ্বারা প্রদত্ত ইউআরএল ব্যবহার করা উচিত কাঁচা সিএসভি প্রতিক্রিয়া পাচ্ছেন, যা হ'ল - https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv

উদাহরণ -

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')))

যদি প্রতিক্রিয়াটি বড় হয় এবং আমি এনকোডযুক্ত সামগ্রী, ডিকোডড সামগ্রী এবং স্ট্রিংআইও অবজেক্টটির জন্য মেমরি গ্রহনের পরিবর্তে এটিকে স্ট্রিম করতে চাই?
আকাইহোলা

9
c=pd.read_csv(url)
পান্ডার

কৌতূহলীভাবে আমার কাছে pandas(0.23.4) এর একটি নতুন সংস্করণ রয়েছে তবে আমি সরাসরি ইউআরএল দিতে পারিনি। এই উত্তরটি আমাকে কাজ করতে সহায়তা করেছে।
আন্তি

1
"পান্ডাস 0.19.2 থেকে আপডেট করুন আপনি এখন সরাসরি ইউআরএল পাস করতে পারেন" " আপনি না করতে পারেন কারণ আপনাকে প্রমাণীকরণের আর্গুমেন্টগুলি পাস করতে হবে, সেক্ষেত্রে আসল উদাহরণটি খুব প্রয়োজন।
অ্যারন হল

এই সমাধানটি এখনও মূল্যবান যদি আপনার এইচটিটিপি কোড ব্যবহার করে আরও ভাল ত্রুটির প্রয়োজন হয় যা অনুরোধের বস্তু দ্বারা ফিরে আসতে পারে (উদা: 500 -> পুনরায় চেষ্টা করার প্রয়োজন হতে পারে, 404 -> পুনরায় চেষ্টা না করা)
জুলিয়েনভি

235

পান্ডাস ( 0.19.2) এর সর্বশেষ সংস্করণে আপনি সরাসরি ইউআরএল পাস করতে পারেন

import pandas as pd

url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
c=pd.read_csv(url)

দেখে মনে হচ্ছে সরাসরি অনুরোধের পরিবর্তে এটি সরাসরি ব্যবহার করা হলেও অনুরোধ-ক্যাশে ব্যবহার করা হয় না যদিও
shadi

5
সেই কোডটি urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>https প্রোটোকলের কারণে ফিরে আসে যা urllib পরিচালনা করতে পারে না।
মাল্টিগডোভার্স

পাইথন 2 ব্যবহারকারীদের জন্য আপনাকে পাইথন 2.7.10+ ব্যবহার করতে হবে।
অ্যাভেলিস

কোনও ইউআরএল থেকে সিএসভি পড়ে কিছু সমস্যা হয়েছে বলে মনে হচ্ছে। আমি স্থানীয় স্টোরেজ থেকে একবার এবং ইউআরএল থেকে একবার ফাইলটি পড়েছি, আমি ইউআরএল থেকে ত্রুটি পেতে থাকি। আমি তখন ত্রুটি_আবাদ_লাইনগুলি = মিথ্যা এবং 99% এরও বেশি ডেটা উপেক্ষা করে সক্ষম করেছি। ইউআরএল লিঙ্ক হয় । আমি একবার ফাইলটি পড়লাম, ডেটাসেটের আকৃতিটি (88,1) পাওয়া গেল, যা সম্পূর্ণ ভুল
ishষিক মণি

10

আমি মন্তব্য আপনি যদি একটি StringIO বস্তু এবং ব্যবহার করতে হবে ডিকোড অর্থাত c=pd.read_csv(io.StringIO(s.decode("utf-8")))যদি অনুরোধ ব্যবহার করার মাধ্যমে আপনি ডিকোড প্রয়োজন .content আয় যেমন বাইট আপনি .text আপনি শুধু গুলি পাস হিসাবে প্রয়োজন হবে ব্যবহৃত s = requests.get(url).textগ = pd.read_csv(StringIO(s))

একটি সহজ পদ্ধিতি হ'ল কাঁচা ডেটার সঠিক ইউআরএল সরাসরি প্রেরণ করা, আপনাকে অবজেক্টের মতো কোনও ফাইল পাস read_csvকরতে হবে না , আপনি একটি url পাস করতে পারেন যাতে আপনার অনুরোধের প্রয়োজন হয় না:

c = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv")

print(c)

আউটপুট:

                              Country         Region
0                             Algeria         AFRICA
1                              Angola         AFRICA
2                               Benin         AFRICA
3                            Botswana         AFRICA
4                             Burkina         AFRICA
5                             Burundi         AFRICA
6                            Cameroon         AFRICA
..................................

ডক্স থেকে :

ফাইলপথ_আর_বাফলার :

স্ট্রিং বা ফাইল হ্যান্ডেল / স্ট্রিংআইও স্ট্রিংটি একটি URL হতে পারে। বৈধ ইউআরএল স্কিমগুলির মধ্যে http, ftp, s3 এবং ফাইল অন্তর্ভুক্ত রয়েছে। ফাইল ইউআরএল জন্য, একটি হোস্ট আশা করা হয়। উদাহরণস্বরূপ, একটি স্থানীয় ফাইল ফাইল হতে পারে: //localhost/path/to/table.csv


1
আপনি সরাসরি পান্ডাস রিড_সিএসভিতে url খাওয়াতে পারেন! অবশ্যই! আমি এটির চেয়ে অনেক সহজ সমাধান! : ডি
পাবটোরে

1
@ পাব্টোরে, হ্যাঁ, কেন ডক্স পড়ার একটি উদাহরণ এটি ভাল ধারণা।
প্যাডেরিক কানিংহাম

6

আপনার যে সমস্যা হচ্ছে তা হ'ল আউটপুটটি আপনি ভেরিয়েবলের 's' এ পাবেন এটি কোনও সিএসভি নয়, তবে এইচটিএমএল ফাইল। কাঁচা সিএসভি পেতে আপনার ইউআরএলটি এখানে পরিবর্তন করতে হবে:

' https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv '

আপনার দ্বিতীয় সমস্যাটি হ'ল রিড_সিএসভি কোনও ফাইলের নাম প্রত্যাশা করে, আমরা আইও মডিউল থেকে স্ট্রিংআইও ব্যবহার করে এটি সমাধান করতে পারি। তৃতীয় সমস্যাটি হ'ল অনুরোধ.গেট (ইউআরএল) con

শেষ ফলাফলটি এই কোড:

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))

আউটপুট:

>>> c.head()
    Country  Region
0   Algeria  AFRICA
1    Angola  AFRICA
2     Benin  AFRICA
3  Botswana  AFRICA
4   Burkina  AFRICA


0

পান্ডে ইউআরএল এর মাধ্যমে ডেটা আমদানি করতে কেবল নীচের সহজ কোডটি প্রয়োগ করুন এটি আসলে আরও ভাল কাজ করে।

import pandas as pd
train = pd.read_table("https://urlandfile.com/dataset.csv")
train.head()

যদি আপনার কোনও কাঁচা ডেটা নিয়ে সমস্যা হয় তবে কেবল URL এর আগে 'r' রাখুন '

import pandas as pd
train = pd.read_table(r"https://urlandfile.com/dataset.csv")
train.head()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.