使用 gspread 中的 gc.open_by_url 跳过导入语句中的第一行(即添加 header=0)

use*_*933 5 python import dataframe pandas gspread

header=0in的等效项是什么pandas,它将第一行识别为标题 in gspread

pandas 导入声明(正确)

import pandas as pd

# gcp / google sheets URL
df_URL = "https://docs.google.com/spreadsheets/d/1wKtvNfWSjPNC1fNmTfUHm7sXiaPyOZMchjzQBt1y_f8/edit?usp=sharing"

raw_dataset = pd.read_csv(df_URL, na_values='?',sep=';'
                          , skipinitialspace=True, header=0, index_col=None)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用 gspread 函数导入数据,将第一行更改为标题,然后删除后面的第一行,但这会将 DataFrame 中的所有内容识别为字符串。我想立即将第一行识别为导入声明中的标题。

需要 header=True 等价的 gspread import 语句

import pandas as pd
from google.colab import auth
auth.authenticate_user()
import gspread
from oauth2client.client import GoogleCredentials


# gcp / google sheets url
df_URL = "https://docs.google.com/spreadsheets/d/1wKtvNfWSjPNC1fNmTfUHm7sXiaPyOZMchjzQBt1y_f8/edit?usp=sharing"

# importing the data from Google Drive  setup
gc = gspread.authorize(GoogleCredentials.get_application_default())

# read data and put it in dataframe
g_sheets = gc.open_by_url(df_URL) 

df = pd.DataFrame(g_sheets.get_worksheet(0).get_all_values())

  
# change first row to header
df = df.rename(columns=df.iloc[0]) 

# drop first row
df.drop(index=df.index[0], axis=0, inplace=True) 
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 1

查看API 文档,您可能想要使用:

df = pd.DataFrame(g_sheets.get_worksheet(0).get_all_records(head=1))
Run Code Online (Sandbox Code Playgroud)

.get_all_records方法返回一个字典,其中列标题作为键,列值列表作为字典值。参数head=<int>决定使用哪一行作为键;行从 1 开始并遵循电子表格的编号。

由于 返回的值.get_all_records()是字符串列表,因此数据框构造函数pd.DataFrame将会返回一个全是字符串的数据框。要将其转换为浮点数,我们需要将空字符串和仅破折号的字符串 ( '-') 替换为 NA 类型值,然后转换为float.

幸运的是 pandas DataFrame 有一个方便的方法来替换值.replace。我们可以将其从我们想要的 NA 字符串映射到 None,后者会转换为 NaN。

import pandas as pd

data = g_sheets.get_worksheet(0).get_all_records(head=1)

na_strings_map= {
    '-': None, 
    '': None
}

df = pd.DataFrame(data).replace(na_strings_map).astype(float)
Run Code Online (Sandbox Code Playgroud)