【问题标题】:Writing loop values within a function into Pandas dataframe将函数内的循环值写入 Pandas 数据帧
【发布时间】:2020-07-12 18:58:18
【问题描述】:

以下函数是 googlesheets quickstart.py 的一部分,允许人们阅读 Googlesheet 网址。 我能够运行测试并使打印工作。 请参阅下面函数中的打印语句: print('%s, %s,%s,%s,%s,%s,%s,%s' % (row[0],row[1],row[2],row[3], row [4], 行[5], 行[6], 行[7])) 我的最终目标是将打印中的数据捕获到熊猫数据框中。我所有的尝试都没有奏效。

def main():
    """Shows basic usage of the Sheets API.
    Prints values from a sample spreadsheet.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('sheets', 'v4', credentials=creds)

    # Call the Sheets API
    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                                range=SAMPLE_RANGE_NAME).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        #print('Name, Major:')

        for row in values:
#             d = {'Case_Type':row.Case_Type,
#              'Date':row.Date,
#              'Cases':row.Cases,
#              'Country_Region':row.Country_Region,
#              'Lat':Lat,
#              'Long':Long}
#             L.append(d)
# df = pd.DataFrame(L)


           #Print columns A and E, which correspond to indices 0 and 7.
          print('%s, %s,%s,%s,%s,%s,%s,%s' % (row[0],row[1],row[2],row[3], row[4], row[5],row[6],row[7]))

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: pandas function loops


    【解决方案1】:

    由于 values 似乎是一个 2D 列表,请尝试这样做

    pd.DataFrame.from_records(values, columns=['Date', 'Cases', 'Country_Region', 'Lat', 'Long'])
    

    【讨论】:

    • 感谢您的回复和建议。我添加了它,它需要永远运行。不会产生错误。为了给你一个想法,打印语句大约需要 2 分钟。之后,对于值中的行:df = pd.DataFrame.from_records(values, columns=['Case_Type','Cases','Difference','Date','Country_Region','Province_State','Admin2',' Combined_Key','FIPS','Lat', 'Long','Prep_Flow_Runtime','Table_Names'] 永远运行。直到挂起。
    • 您是否将代码 pd.DataFrame.from_records(values, columns=['Date', 'Cases', 'Country_Region', 'Lat', 'Long']) 放入循环中?因为它只需要运行一次,它不需要在那个for循环中
    • 您好,我最初在循环之外尝试过,就在行 values = result.get('values', []) 之后。它产生一个空白的df。谢谢。
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2020-07-22
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多