从存储在列表中的数据框中提取列。列表由多个数据框组成

时间:2019-06-04 04:36:17

标签: pandas list dataframe indexing jupyter

我有一个名为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跟踪(最近一次通话最近) D:\ Anaconda \ lib \ site-packages \ pandas \ core \ indexes \ base.py在get_loc中(自身,键,方法,公差)    2656试试: -> 2657返回self._engine.get_loc(key)    2658,除了KeyError:

pandas._libs.index.IndexEngine.get_loc()中的

pandas / _libs / index.pyx

pandas._libs.index.IndexEngine.get_loc()中的

pandas / _libs / index.pyx

pandas中的pandas / _libs / hashtable_class_helper.pxi._libs.hashtable.PyObjectHashTable.get_item()

pandas中的pandas / _libs / hashtable_class_helper.pxi._libs.hashtable.PyObjectHashTable.get_item()

KeyError:2

在处理上述异常期间,发生了另一个异常:

KeyError跟踪(最近一次通话最近)  在()中 ----> 1个数据[1] [2]

1 个答案:

答案 0 :(得分:0)

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