【问题标题】:Extracting a column from a data frame which is stored in a list. List consists of multiple data frames从存储在列表中的数据框中提取列。列表由多个数据框组成
【发布时间】:2019-10-19 14:27:04
【问题描述】:

我有一个名为 data 的列表,其中包含多个数据框。 data[0]、data[1] 等将显示数据框 1、数据框 2 等。所有数据框的行数和属性数都不同。我想知道有没有一种方法可以编写 data[1][2] 来提取数据框 2 和列 3 名称。即 data[i][j] 表示第 (i+1) 个数据帧和第 (i+1) 个数据帧中的第 (j+1) 个属性。

列表(数据[1].columns.values) 我知道上面的代码给了我所有的属性。我有兴趣了解使用上述方式的索引 - data[i][j]。

import os
import pandas as pd
path = os.getcwd()
files = os.listdir(path)
files
files_xlxs = [f for f in files if f[-4:] == 'xlsx']
files_xlxs = [f for f in files_xlxs if '$' not in f]
data = [] 
for f in files_xlxs:
    pathFile = path + '\\' + f
    print(pathFile)
    data.append(pd.read_excel(pathFile))
data[1]     

Data[1][2] 应该从数据框 2 中提取第三列名称。编译后出现以下错误。

KeyError Traceback(最近一次调用最后一次) D:\Anaconda\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2656 尝试: -> 2657 返回 self._engine.get_loc(key) 2658 除了 KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

密钥错误:2

在处理上述异常的过程中,又发生了一个异常:

KeyError Traceback(最近一次调用最后一次) 在 () ----> 1 个数据[1][2]

【问题讨论】:

    标签: pandas list dataframe indexing jupyter


    【解决方案1】:

    pandas 试图告诉您的是,您正试图访问一个没有名为 2 的列的数据框中的名为 2 的列。您不能像访问列表中的元素一样访问数据框中的列,即按索引。

    不过,您可以做的是从数据框的列列表中获取列标识符,然后使用它来查询您的数据框。你可以使用data[1][data[1].columns[2]],而不是data[1][2]

    这是一个完整的示例,其中包含一个名为 data 的列表,其中包含两个数据框,每个数据框有两列:

    import pandas as pd
    data = [
        pd.DataFrame({"number": [1, 2, 3], "age": [10, 20, 30]}, columns=["number", "age"]),
        pd.DataFrame({"value": [4, 5, 6], "bananas": [40, 50, 60]}, columns=["value", "bananas"])
    ]
    
    # Print the content of each data frame
    for df in data:
        print df
    

    这会打印出两个数据框:

       number  age
    0       1   10
    1       2   20
    2       3   30
       value  bananas
    0      4       40
    1      5       50
    2      6       60
    

    然后我们只访问并打印列表中每个数据框的第二列,分别打印age 列和bananas 列:

    # Print 2nd column of 1st data frame
    print data[0][data[0].columns[1]]
    
    # Print 2nd column of 2nd data frame
    print data[1][data[1].columns[1]]
    

    这给出了:

    0    10
    1    20
    2    30
    Name: age, dtype: int64
    0    40
    1    50
    2    60
    Name: bananas, dtype: int64
    

    【讨论】:

    • 而不是打印第一个数据帧的第二列。我只想打印列名,即年龄。你能帮我解决这个问题吗?
    • print data[0].columns[1]data[0] 是一个 DataFrame,DataFrame.columns 列出了其中列的标签。所以data[0].columns[1] 给出了第一个 DataFrame 中第二列的标签
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多