Wprowadzenie arkusza kalkulacyjnego Google CSV do ramki danych Pandy
Wgrałem plik do arkuszy kalkulacyjnych Google (aby zrobić publicznie dostępny przykładowy Notatnik IPython z danymi) używałem pliku w jego natywnej formie można go odczytać do ramki danych Pandy. Więc teraz używam poniższego kodu, aby odczytać arkusz kalkulacyjny, działa dobrze, ale po prostu przychodzi jako ciąg znaków, i nie mam żadnego szczęścia próbując go z powrotem do ramki danych (można uzyskać dane)
import requests
r = requests.get('https://docs.google.com/spreadsheet/ccc?key=0Ak1ecr7i0wotdGJmTURJRnZLYlV3M2daNTRubTdwTXc&output=csv')
data = r.content
Dane kończą się następująco: (nagłówki pierwszego wiersza)
',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
Rodzimy Kodeks pand to powoduje, że plik rezydenta dysku wygląda następująco:
df = pd.io.parsers.read_csv('/home/tom/Dropbox/Projects/annonallanswerswithmaster1012013.csv',index_col=0,parse_dates=['Quradate'])
"czyste" rozwiązanie byłoby pomocne dla wielu, aby zapewnić łatwy sposób udostępniania zestawów danych do użytku Pandy! Wypróbowałem kilka alternatyw bez powodzenia i jestem prawie pewien, że znowu brakuje mi czegoś oczywistego.
Tylko uwaga Aktualizacja Nowy arkusz kalkulacyjny Google ma inny wzorzec URL wystarczy użyć tego zamiast adresu URL w powyższym przykładzie i lub poniżej odpowiedzi i powinno być dobrze tutaj jest przykład:
https://docs.google.com/spreadsheets/d/177_dFZ0i-duGxLiyg6tnwNDKruAYE-_Dd8vAQziipJQ/export?format=csv&id
Zobacz rozwiązanie poniżej z @ Max Ghenis, który właśnie użył pd.read_csv, nie ma potrzeby StringIO ani żądań...
6 answers
Możesz użyć read_csv()
na obiekcie StringIO
:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 13:36:15
Chyba działa dla mnie Bez 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, w tym ?gid=
umożliwia importowanie różnych arkuszy, znajdź gid w adresie URL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 06:41:39
Moje podejście jest nieco inne. Używałem pand.Dataframe (), ale oczywiście potrzebne do zainstalowania i zaimportowania gspread. I to działało dobrze!
gsheet = gs.open("Name")
Sheet_name ="today"
wsheet = gsheet.worksheet(Sheet_name)
dataframe = pd.DataFrame(wsheet.get_all_records())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 14:37:53
Otwórz określony arkusz w przeglądarce. Upewnij się, że jest przynajmniej widoczny dla każdego z linkiem. Skopiuj i wklej adres URL. Dostaniesz coś w stylu https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER
.
sheet_url = 'https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/edit#gid=NUMBER'
Najpierw zamieniamy to na URL eksportu CSV, jak https://docs.google.com/spreadsheets/d/BLAHBLAHBLAH/export?format=csv&gid=NUMBER
:
csv_export_url = sheet_url.replace('/edit#gid=', '/export?format=csv&gid=')
Następnie przekazujemy to pd.read_csv , który może przyjmować adres URL.
df = pd.read_csv(csv_export_url)
Spowoduje to złamanie się, jeśli Google zmieni swoje API (wydaje się nieudokumentowane) i może powodować nieprzydatne błędy, jeśli wystąpi awaria sieci.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 17:48:50
Używałem następujących utils i do tej pory działało:
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)
Musisz podać nazwę arkusza i klucz. Kluczem jest ciąg znaków, który otrzymujesz z adresu url w następującej ścieżce: https://docs.google.com/spreadsheets/d/{key}/edit/
.
Możesz zmienić wartość nagłówków, jeśli masz więcej niż jeden wiersz dla nazw kolumn, ale nie jestem pewien, czy nadal działa z wieloma nagłówkami.
Może zahamować, Jeśli Google zmieni ich API.
Należy również pamiętać, że arkusz kalkulacyjny musi być publiczny, każdy z linkiem można go przeczytać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 10:46:32
Jeśli plik csv został udostępniony przez dysk, a nie przez arkusz kalkulacyjny, to poniższa zmiana adresu URL zadziała
#Derive the id from the google drive shareable link.
#For the file at hand the link is as below
#<https://drive.google.com/open?id=1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69>
file_id='1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69'
link='https://drive.google.com/uc?export=download&id={FILE_ID}'
csv_url=link.format(FILE_ID=file_id)
#The final url would be as below:-
#csv_url='https://drive.google.com/uc?export=download&id=1-tjNjMP6w0RUV4GhJWw08ql3wYwsNU69'
df = pd.read_csv(csv_url)
A ramka danych byłaby (gdybyś tylko uruchomił powyższy kod)
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
Zobacz kod roboczy tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 01:34:00