pandas - 如何从存储在数据帧行中的列表中提取值

时间:2018-01-07 13:46:08

标签: python python-3.x pandas

我觉得这个问题的解决方案非常简单,但我无法弄清楚。 所以,我有一个Pandas DataFrame,截图如下: enter image description here

列名无关紧要,所以我只是将它们从图片中排除。但重要的是,我在第一列中有一个值列表。现在,如果您查看图像的下半部分,它会有一个包含值[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

1 个答案:

答案 0 :(得分:1)

我认为您需要indexing with str来选择list s的第一个值:

energy["Country"] = energy["Country"].str.split("(").str[0]