我试图从数据集中选择特定的列,但总是得到相同的错误:长度不匹配:预期轴有31个元素,新值有1个元素
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 = [str(ticker_info.Ticker)]
ValueError: Length mismatch: Expected axis has 31 elements, new values have 1 elements
esg_data
[str(ticker_info.Ticker)]
ticker_info.Ticker
你曾表示:我正在尝试从数据集中选择特定列如果您尝试从esg_data中选择Ticker列,可以执行以下操作:
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'],您应该能够按如下所示执行此操作:
esg_data.loc[['Total-Score','E-Score','S-Score','G-Score', 'ESG-Performance','total Percentile','peer Group','max Highest Controversy'],:]
loc
:
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']]
1条答案
按热度按时间iszxjhcz1#
您问题中的代码是:
给出错误的行是:
esg_data.columns = [str(ticker_info.Ticker)]
错误为:
ValueError: Length mismatch: Expected axis has 31 elements, new values have 1 elements
出现此错误消息的原因是:
esg_data
)的 Dataframe 的列索引,因此要更新它,必须提供相同长度的类似列表的对象[str(ticker_info.Ticker)]
,它是一个1元素的列表(即ticker_info.Ticker
转换为字符串)你曾表示:
我正在尝试从数据集中选择特定列
如果您尝试从
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']
,您应该能够按如下所示执行此操作:...或(更简洁):