首页 > 解决方案 > 从存储在列表中的数据框中提取列。列表由多个数据框组成

问题描述

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

list(data[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 try: -> 2657 return self._engine。 get_loc(key) 2658 除了 KeyError:

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

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

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

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

关键错误:2

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

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

标签: pandaslistdataframeindexingjupyter

解决方案


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

但是,您可以做的是从数据框列的列表中获取列标识符,然后使用它来查询您的数据框。而不是做data[1][2]你可以做data[1][data[1].columns[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

推荐阅读