比较嵌套在lis中的不同数据帧中的元素

2024-04-26 11:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约80个结构相似的csv文件(相同的列名和行数),我想从中获得整个文件集中每个单元格的最大值。
我现在的想法是将它们加载到一个列表中,然后进行比较,但是从嵌套的数据帧中检索单元格值时遇到了问题。
这是在数据帧列表中加载csv的代码:

import glob
allFiles = glob.glob("./*.txt")
results = [None]*len(allFiles)
i=0
for file_ in allFiles:
    results[i] = pd.read_csv(file_, sep = "\t")
    i=i+1

举个例子,我们来比较一下这两个文件:

a.txt
t   a   b
0   1   2
1   3   4
2   5   6

b.txt
t   a   b
0   1   3
1   0   2
2   7   9

结果列表中的每个元素都是一个数据帧:

>> results[i].info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 1 columns):
t   a   b    3 non-null object
dtypes: object(1)

我想找出每个单元格中两个数据帧的最大值,并最终输出另一个数据帧,在每个位置,最大值对应于该位置,在这种情况下会导致:

t   a   b
0   1   3
1   3   4
2   7   9

我怎么能做到呢? 或者有更好的方法来解决整个问题?
谢谢


Tags: columns文件csv数据代码importtxtnone
1条回答
网友
1楼 · 发布于 2024-04-26 11:21:16

您可以通过^{}MultiIndex创建一个大数据帧:

allFiles = glob.glob("./*.txt")
results = [pd.read_csv(file_, sep = "\t") for file_ in allFiles]

names = [os.path.basename(f).split('.')[0] for f in allFiles]
df = pd.concat(results, keys=names)
print (df)
     t   a   b
a 0  0   1   2
  1  1   3   4
  2  2   5   6
b 0  0   1   3
  1  1   0   2
  2  2   7   9

如果需要每个数据帧的最大值:

max_val = df.max(level=0)
print (max_val)
   t   a   b
a  2   5   6
b  2   7   9

max_val = df.max(level=1)
print (max_val)
   t   a   b
0  0   1   3
1  1   3   4
2  2   7   9

相关问题 更多 >