尝试搜索pandas DataFrame,但显示为空



我正在编写一个python程序,该程序附加到Google Sheet,它的目的是能够通过电子表格搜索,并根据用户输入找到包含"id"的行。输入。我试图让它返回行中的其他值,用于定价公式,并最终构建价格标签。

问题来自于这样一个事实:当我使用本地CSV运行我的程序时,它运行得很好。在连接到谷歌表格后,它现在告诉我我的索引0超出了大小为0的轴0的范围。我的数据帧的结构与从本地CSV运行的数据帧相同,当我打印df时,它甚至显示所有数据,但是当我尝试运行搜索时,它告诉我一切都是空的。例如,如果我要运行print(costi),我将得到"[]"当我应该得到["value"](值是那个单元格中的值)

from __future__ import print_function
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google.oauth2 import service_account
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
import math

SERVICE_ACCOUNT_FILE = 'keys.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# The ID and range of a sample spreadsheet.
SPREADSHEET_ID = '********************'

service = build('sheets', 'v4', credentials=creds)
# Call the Sheets API
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID,
range="Inv!A1:G610").execute()
values = result.get('values', [])
df = pd.DataFrame(values, columns = ['Location', 'Inv Status Code', 'Model #', 'Alternate ID', 'Serial #', 'Model Description', 'Actual Cost'])
#Input to be used for searching
searchAlt = int(input("Stock Number: ").lstrip("0"))
condition = int(input("Condition 1-10: "))
#Identifying all columns in row where altId column matches, placing results into array
costi = df.loc[df['Alternate ID'] == searchAlt]['Actual Cost'].values

表中有"位置"、"Inv状态码"、"型号#"、"备用ID"、"序列号#"、"型号描述"、"实际成本"列。这是一个很大的问题,我确信我在这里错过了非常重要的东西,并且有一些非常可怕的练习。这是我的第一个编码项目,我已经能够应付大部分,但这是完全阻止我。非常感谢你的任何和所有的帮助,并为大家的时间!

在没有访问valuesdf的情况下很难调试。我建议print(values)后,你定义它,以确保你正在读取的值(并没有一个空的数据框)。然后你可以在df之后做同样的事情。如果它们都打印真实的数据帧,那么下一步是检查searchAlt值。当实际数据框具有不同的类型时,假设一种数据类型是一个常见的错误(这里,searchAltint类型)。您可以通过运行命令

来检查:
print(df['Alternate ID'])

应该显示如下内容:

0    2  # your values here
1    2
Name: Alternate ID, dtype: int64

如果最后一行显示的是dtype: objectint以外的任何内容,那么searchAlt比较将找不到任何匹配项,最终将得到一个空表。注意intint64都可以,因为numpy可以比较它们。但是像object这样的东西意味着pandas将列解释为字符串。在这种情况下,您必须自己更改数据类型。详细信息请参见pandas文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.convert_dtypes.html

相关内容

  • 没有找到相关文章

最新更新