尝试使用.loc从Pandas数据帧中提取特定列/行时出错

时间:2018-03-22 20:56:01

标签: python pandas data-science

我一直在datacamp上学习Python数据科学的在线课程,但是当我使用我在那里使用的相同代码并在我的计算机上运行它(而不是他们的网站)时,我收到的错误是我没有了解。我正在使用Spyder和Python 3.6。

我的代码的目标是导入.csv文件,从pandas数据框中提取两行和两列并打印出结果。从那里我可以在直方图上绘制数据,然后展开它。但首先,我必须让基础工作起作用。我一直在使用的代码是:

import pandas as pd

df = pd.read_csv('drinks.csv')
df1 = df.loc[['USA', 'Germany'], ['country', 'beer_servings']]
print(df1)

我得到的错误是:

KeyError: "None of [['USA', 'Germany']] are in the [index]"

如果有人想查看我使用的数据,我用来下载的链接是:https://github.com/fivethirtyeight/data/blob/master/alcohol-consumption/drinks.csv

即使我尽可能简单并且只提取一行,我仍然会得到相同的错误(如下所示)。如果我尝试提取单个列,则会发生同样的事情。

import pandas as pd

df = pd.read_csv('drinks.csv')
df1 = df.loc[['USA']]
print(df1)

错误是:

KeyError: "None of [['USA']] are in the [index]"

我有什么遗失的东西吗?

https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/

这是我用来尝试理解我做错了什么的网站,但对于我的生活,我无法弄清楚我错过了什么。我知道这可能是一个非常微不足道的问题,但如果您有任何建议我会很乐意听到,请提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您需要先将国家/地区列设置为索引:

import pandas as pd

df = pd.read_csv('drinks.csv').set_index('country')
df1 = df.loc[['USA', 'Germany'], 'beer_servings']
print(df1)

输出:

country
USA        249
Germany    346
Name: beer_servings, dtype: int64

答案 1 :(得分:0)

你可以这样做:

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.HashMap;
import java.util.Map;

public class TestJson {
    public static void main(String[] args) throws Exception {
        Map<String, Map<String, String[]>> myFile = new HashMap<>();

        Map<String, String[]> subMap1 = new HashMap<>();
        Map<String, String[]> subMap2 = new HashMap<>();
        Map<String, String[]> subMap3 = new HashMap<>();

        String[] myArray = new String[] {"listele1", "listele2"};

        subMap1.put("value1", myArray);
        subMap2.put("value2", myArray);
        subMap3.put("value3", myArray);

        myFile.put("key1", subMap1);
        myFile.put("key2", subMap2);
        myFile.put("key3", subMap3);

        ObjectMapper mapper = new ObjectMapper();

        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(myFile));

    }
}

或者,您可以df1 = df.loc[df['country'].isin(['USA', 'Germany']), ['country', 'beer_servings']] 先使现有代码正常工作。

set_index

答案 2 :(得分:0)

尝试:

>>> df.loc[df['country'].isin(['USA', 'Germany']), ['country', 'beer_servings']]
     country  beer_servings
65   Germany            346
184      USA            249