【问题标题】:Access each element of series stored as a list访问存储为列表的系列的每个元素
【发布时间】:2020-05-26 00:42:05
【问题描述】:

我想对存储为列表的系列中的每个元素执行逻辑操作。我已经编写了以下代码。但是,它显示错误“Series的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。”

这是我写的代码:

import pandas as pd
import numpy as np

df_new           = pd.read_excel (r'file_name.xlsx')

columns = df_new.columns
jun = []
for col in columns[1:]:
    jun.append(df_new[col]/84)
for i in range(0,300):
    if jun[i]==1:
        jun.append(jun[i])

我正在尝试调试,我猜是导致错误的最后 3 行。我不知道如何访问存储为列表的系列中的每个元素。这就是弹出上述错误的原因。请帮我理解错误。

【问题讨论】:

  • 添加 file_name.xlsx 中的示例
  • 您有300 列吗?如果是这样,修复将是(jun[i]==1).all()

标签: python pandas list series logical-operators


【解决方案1】:

您可以使用 df.loc 比较列中的所有值:

在下面的代码中,如果第 1 列中的值为 == 0,则将替换为“值为 0”,您也可以将结果放在另一个列中。

import pandas as pd

df1.loc[(df1.Col1 == '0'), 'Col1'] = 'Value is 0'

【讨论】:

    【解决方案2】:

    希望this link能帮到你:

    import xlrd
    path = ("file_name.xlsx")
    wb = xlrd.open_workbook(path) 
    sheet = wb.sheet_by_index(0) 
    
    print(sheet.ncols,sheet.nrows)
    
    for i in range(sheet.nrows): 
        print(sheet.cell_value(i, 0))
    for i in range(sheet.ncols): 
        print(sheet.cell_value(i, 0))
    

    【讨论】:

      【解决方案3】:

      当您执行jun[i]==1 时,您将整个列与 1 进行比较,并且您得到一个无法在您的if 语句中评估的pandas.core.series.Seriesif jun[i]==1:,您可以这样做:

      if (jun[i]==1).all():
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        相关资源
        最近更新 更多