【问题标题】:Store Value From df to Variable将值从 df 存储到变量
【发布时间】:2018-10-26 21:43:11
【问题描述】:

我正在尝试从数据框中提取一个值并将其放入一个变量中。然后稍后我会将该值记录到 Excel 工作簿中。

首先我运行一个 SQL 查询并存储到一个 df 中:

df = pd.read_sql(strSQL, conn)

我正在遍历另一个项目列表并在 df 中查找它们。它们通过 df 中的 MMString 和我正在循环的项目列表中的 MMConcat 连接。

dftemp = df.loc[df['MMString'] == MMConcat]
Category = dftemp['CategoryName'].item()

我在上面的最后一行代码中收到以下错误。 ValueError: 只能将大小为 1 的数组转换为 Python 标量

在调试控制台中,当我运行最后一行代码但没有将其存储到变量中时,我得到了一个看起来像字符串的值。例如,“皮卡车”。

如何将我在 df 中查找的值简单地存储到变量中?

【问题讨论】:

    标签: python pandas indexing


    【解决方案1】:

    loc按行列索引以返回一个系列,然后通过iat提取第一个值:

    Category = df.loc[df['MMString'] == MMConcat, 'CategoryName'].iat[0]
    

    或者,从 NumPy 数组表示中获取第一个值:

    Category = df.loc[df['MMString'] == MMConcat, 'CategoryName'].values[0]
    

    文档没有帮助,但 pd.Series.item 只是调用 np.ndarray.item 并且仅适用于具有一个值的系列:

    pd.Series([1]).item()     # 1
    pd.Series([1, 2]).item()  # ValueError: can only convert an array of size 1
    

    【讨论】:

    • 谢谢,但我现在收到此错误:IndexError: index 0 is out of bounds for axis 0 with size 0
    • IndexError: index 0 is out of bounds for axis 0 with size 0 表示你的条件不匹配。您还没有指定在这种情况下需要什么。您可以使用try... except IndexError 构造,或使用next(iter(df.loc[df['MMString'] == MMConcat, 'CategoryName'].values), -1),其中-1 是您的后备值。
    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2020-04-18
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多