pandas 长度不匹配:轴应有""个元素,新值有1个元素

txu3uszq  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(686)

我试图从数据集中选择特定的列,但总是得到相同的错误:长度不匹配:预期轴有31个元素,新值有1个元素

iszxjhcz

iszxjhcz1#

您问题中的代码是:

import yfinance as yf
import yesg
ticker_info = yesg.get_esg_full(report_ticker)
esg_data = pd.DataFrame(ticker_info)
esg_data.columns = [str(ticker_info.Ticker)]

esg_data.loc[['Total-Score','E-Score','S-Score','G-Score',
    'ESG-Performance','total Percentile','peer Group','max Highest Controversy'],:]

给出错误的行是:esg_data.columns = [str(ticker_info.Ticker)]
错误为:ValueError: Length mismatch: Expected axis has 31 elements, new values have 1 elements
出现此错误消息的原因是:

  • esg_data.columns是具有31列(即esg_data)的 Dataframe 的列索引,因此要更新它,必须提供相同长度的类似列表的对象
  • 实际提供对象是[str(ticker_info.Ticker)],它是一个1元素的列表(即ticker_info.Ticker转换为字符串)

你曾表示:
我正在尝试从数据集中选择特定列
如果您尝试从esg_data中选择Ticker列,可以执行以下操作:

columnToSelect = esg_data.Ticker

如果您试图在读取esg_data.loc[['Total-Score','E-Score','S-Score','G-Score', 'ESG-Performance','total Percentile','peer Group','max Highest Controversy'],:]的代码行中从esg_data中选择多个列,这可能会有问题,因为loc的第一个参数应该是索引标签列表(而不是列标签),而第二个参数(在本例中为:)将被解释为列标签列表。
如果(正如我猜想的那样)您希望选择esg_data的 * 行 *(或多行),其中Ticker列值对应于str(ticker_info.Ticker),然后从该对象中选择列值['Total-Score','E-Score','S-Score','G-Score', 'ESG-Performance','total Percentile','peer Group','max Highest Controversy'],您应该能够按如下所示执行此操作:

rowsMatchingTicker = esg_data[esg_data.Ticker == str(ticker_info.Ticker)]
desiredColumnsMatchingTicker = rowsMatchingTicker[:, ['Total-Score','E-Score','S-Score','G-Score',
    'ESG-Performance','total Percentile','peer Group','max Highest Controversy']]

...或(更简洁):

desiredColumnsMatchingTicker = esg_data.loc[esg_data.Ticker == str(ticker_info.Ticker), 
    ['Total-Score','E-Score','S-Score','G-Score',
    'ESG-Performance','total Percentile','peer Group','max Highest Controversy']]

相关问题