2013-10-26 9 views
30

मैंने Google स्प्रेडशीट्स (डेटा के साथ एक सार्वजनिक रूप से सुलभ उदाहरण आईपीथॉन नोटबुक बनाने के लिए) को एक फ़ाइल अपलोड की है, मैं फ़ाइल का उपयोग अपने मूल रूप में कर रहा था जिसे पांडस डेटाफ्रेम में पढ़ा जा सकता है। तो अब मैं स्प्रेडशीट को पढ़ने के लिए निम्न कोड का उपयोग करता हूं, ठीक काम करता है लेकिन स्ट्रिंग के रूप में आता है, और मुझे डेटाफ्रेम में वापस लाने की कोशिश करने में कोई भाग्य नहीं है (आप डेटा प्राप्त कर सकते हैं)एक पांडस डेटाफ्रेम में Google स्प्रेडशीट सीएसवी प्राप्त करना

import requests 
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv') 
data = r.content 
(1 पंक्ति हैडर)

',City,region,Res_Comm,mkt_type,Quradate,National_exp,Alabama_exp,Sales_exp,Inventory_exp,Price_exp,Credit_exp\n0,Dothan,South_Central-Montgomery-Auburn-Wiregrass-Dothan,Residential,Rural,1/15/2010,2,2,3,2,3,3\n10,Foley,South_Mobile-Baldwin,Residential,Suburban_Urban,1/15/2010,4,4,4,4,4,3\n12,Birmingham,North_Central-Birmingham-Tuscaloosa-Anniston,Commercial,Suburban_Urban,1/15/2010,2,2,3,2,2,3\n 

देशी पांडा कोड है कि डिस्क निवासी फ़ाइल में लाता दिखाई देता है::

df = pd.io.parsers.read_csv('/home/tom/Dropbox/Projects/annonallanswerswithmaster1012013.csv',index_col=0,parse_dates=['Quradate']) 

एक "क्लीन" समाधान मददगार होगा

डेटा की तरह लग रही समाप्त होता है सेवा मेरे कई पांडों के उपयोग के लिए डेटासेट साझा करने का एक आसान तरीका प्रदान करने के लिए! मैंने बिना किसी सफलता के वैकल्पिक विकल्प का प्रयास किया और मुझे पूरा यकीन है कि मुझे कुछ स्पष्ट याद आ रही है।

बस एक अद्यतन ध्यान दें नया गूगल स्प्रेडशीट एक अलग URL पैटर्न बस ऊपर के उदाहरण में URL के स्थान पर इस का उपयोग किया है और या नीचे इस सवाल का जवाब और तुम यहाँ ठीक होना चाहिए एक उदाहरण है:

https://docs.google.com/spreadsheets/d/177_dFZ0i-duGxLiyg6tnwNDKruAYE-_Dd8vAQziipJQ/export?format=csv&id 

देखने @Max Ghenis से नीचे समाधान जो सिर्फ pd.read_csv इस्तेमाल किया, StringIO या अनुरोध के लिए कोई जरूरत नहीं ...

उत्तर

36

आप एक StringIO वस्तु पर read_csv() उपयोग कर सकते हैं:

from StringIO import StringIO # got moved to io in python3. 

import requests 
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv') 
data = r.content 

In [10]: df = pd.read_csv(StringIO(data), index_col=0,parse_dates=['Quradate']) 

In [11]: df.head() 
Out[11]: 
      City           region  Res_Comm \ 
0  Dothan South_Central-Montgomery-Auburn-Wiregrass-Dothan Residential 
10  Foley        South_Mobile-Baldwin Residential 
12 Birmingham  North_Central-Birmingham-Tuscaloosa-Anniston Commercial 
38  Brent  North_Central-Birmingham-Tuscaloosa-Anniston Residential 
44  Athens     North_Huntsville-Decatur-Florence Residential 

      mkt_type   Quradate National_exp Alabama_exp Sales_exp \ 
0   Rural 2010-01-15 00:00:00    2   2   3 
10 Suburban_Urban 2010-01-15 00:00:00    4   4   4 
12 Suburban_Urban 2010-01-15 00:00:00    2   2   3 
38   Rural 2010-01-15 00:00:00    3   3   3 
44 Suburban_Urban 2010-01-15 00:00:00    4   5   4 

    Inventory_exp Price_exp Credit_exp 
0    2   3   3 
10    4   4   3 
12    2   2   3 
38    3   3   2 
44    4   4   4 
+1

बहुत उपयोगी ... स्ट्रिंगियो सीखने की आवश्यकता होगी! – dartdog

+0

मैं सप्ताहों की तलाश में था कि स्प्रेडशीट को पांडा में कैसे आयात किया जाए। अनुरोधों या स्ट्रिंगियो पुस्तकालयों के बारे में कभी नहीं सुना। धन्यवाद!! – moldovean

+0

ऊपर दिए गए मूल प्रश्न के निचले भाग में नया यूआरएल प्रारूप नोट करें, नए Google स्प्रेडशीट संस्करण – dartdog

26

StringIO बिना मेरे लिए काम करने के लिए लगता है:

test = pd.read_csv('https://docs.google.com/spreadsheets/d/' + 
        '0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc' + 
        '/export?gid=0&format=csv', 
        # Set first column as rownames in data frame 
        index_col=0, 
        # Parse column values to datetime 
        parse_dates=['Quradate'] 
       ) 
test.head(5) # Same result as @TomAugspurger 

Btw, ?gid= अलग शीट आयात करने को सक्षम, URL में gid लगता है भी शामिल है।

+0

से अच्छे अंक भी आप पी 3 का उपयोग कर रहे हैं? अनुरोधों की आवश्यकता नहीं होने की भी अच्छी कोशिश करने का मौका नहीं मिला है ... – dartdog

+0

हाँ मैं पाइथन 3 का उपयोग कर रहा हूं। –

+1

ग्रेट सॉल्यूशन, बस इसे सत्यापित किया, बहुत अच्छा! – dartdog

1

मेरा दृष्टिकोण थोड़ा अलग है। मैंने अभी पांडा का उपयोग किया था। डेटाफ्रेम() लेकिन जीस्प्रेड को स्थापित और आयात करने के लिए स्पष्ट रूप से आवश्यक है। और यह ठीक काम किया!

gsheet = gs.open("Name") 
Sheet_name ="today" 
wsheet = gsheet.worksheet(Sheet_name) 
dataframe = pd.DataFrame(wsheet.get_all_records()) 
+0

अच्छा .. इंटरफेस क्लीनर हो रहा है! – dartdog

1

मैं निम्नलिखित utils का उपयोग कर किया गया है और यह अब तक काम किया:

def load_from_gspreadsheet(sheet_name, key): 
    url = 'https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet={sheet_name}&headers=1'.format(
     key=key, sheet_name=sheet_name.replace(' ', '%20')) 

    log.info('Loading google spreadsheet from {}'.format(url)) 

    df = pd.read_csv(url) 
    return df.drop([col for col in df.columns if col.startswith('Unnamed')], axis=1) 

आप SHEET_NAME और कुंजी निर्दिष्ट करनी होगी। कुंजी आपको निम्न पथ में यूआरएल से प्राप्त स्ट्रिंग है: https://docs.google.com/spreadsheets/d/{key}/edit/

यदि आपके पास कॉलम नामों के लिए एक से अधिक पंक्ति हैं तो आप हेडर के मान को बदल सकते हैं, लेकिन मुझे यकीन नहीं है कि यह अभी भी मल्टी-हेडर के साथ काम करता है या नहीं।

यदि Google अपने एपीआई बदल देगा तो यह ब्रेक हो सकता है।

कृपया ध्यान रखें कि आपकी स्प्रेडशीट सार्वजनिक होनी चाहिए, लिंक वाला हर कोई इसे पढ़ सकता है।

संबंधित मुद्दे