我觉得这个问题的解决方案非常简单,但我无法弄清楚。
所以,我有一个Pandas DataFrame,截图如下:
列名无关紧要,所以我只是将它们从图片中排除。但重要的是,我在第一列中有一个值列表。现在,如果您查看图像的下半部分,它会有一个包含值[Bolivia , Plurinational State of)]
的列表。我试图从该列表中取第一个值,即Bolivia
,并将其保存在同一行而不是该列表中。如果我使用像能量[“国家”] [0](相关列的名称是“国家”)这样的东西,我可以提取值,它也将从其他行中提取所需的值,因为只有一个该列表中的值。但由于某种原因,我收到了错误。
以下是我的尝试:
import numpy as np
import pandas as pd
def answer_one():
energy = pd.read_excel('Energy Indicators.xls',
sheet_name='Energy',
skiprows=[10,11,12,13,14,15,16,17],
skipfooter=38,
header=9,
parse_cols=[2,3,4,5], na_values = "...")
energy.columns = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']
energy["Energy Supply"] = energy["Energy Supply"].mul(1000000)
energy["Country"] = energy["Country"].str.split("(")[0]
return energy
answer_one()
[0]
结尾处的尾随energy["Country"] = energy["Country"].str.split("(")
正在制造麻烦。我得到的错误如下:
ValueError:值的长度与索引的长度
不匹配
有解决方法吗?
另外,还有一个问题:有没有办法扩展第二列的宽度,以便像1.430000e + 08这样的值可以自然形式显示?
(可以找到完整的文件“Energy Indicator.xls”here)
答案 0 :(得分:1)
我认为您需要indexing with str来选择list
s的第一个值:
energy["Country"] = energy["Country"].str.split("(").str[0]