来自concat()的熊猫切片

时间:2018-04-15 19:22:11

标签: python python-3.x pandas

我已经阅读了许多excel文件并将它们连接成一个数据帧。我还添加了密钥,因此我知道任何给定的一块/大块数据来自哪个excel文件。知道哪个文件数据来自我的工作非常重要。

我的excel文件都以数字增加结束。例如。 _00,_01,_02,_03等

path = os.getcwd()
allFiles = glob.glob(os.path.join(path, "*.xlsx"))
allFiles.sort() # put files in numerical order
# e.g. _00, then _01, then _02, and so on

keys = [[] for x in range(len(allFiles))]
for idx, name in enumerate(allFiles):
    keys[idx] = name[-7:-5] # returns numbers 00, 01, 02, etc.

df = pd.concat((pd.read_excel(f) for f in allFiles), keys = keys)

现在我将所有这些数据都放在一个数据帧中,如何使用任何给定的密钥访问所有数据?例如,我想对第一个excel文件中的所有数据进行直方图;密钥为'00'

的密钥

在一个数据框架中拥有所有内容甚至是最好的方法吗?

2 个答案:

答案 0 :(得分:2)

我认为最简单的是使用DataFrame.xs

df1 = df.xs('00')

或者:

df1 = df.loc['00']

编辑:

您的代码似乎应该简化:

df = pd.concat({f[-7:-5]: pd.read_excel(f) for f in allFiles})

答案 1 :(得分:0)

我认为在相同的数据框中拥有所有内容是可取的,并强烈建议不要拆分它。 我会推荐像这样的东西

import matplotlib.pyplot as plt

plt.hist(df[df["column"]== '00'])
plt.show()

('column'是包含该行来自哪个文件以及'00'是特定值的信息的列。)