繁体   English   中英

Python:多维 pandas DataFrame

[英]Python: multidimensional pandas DataFrame

这是我的第一个问题。

我有很多组数据。 它们中的每一个都应该以 DataFrame 的形式呈现。 我试图通过将 DataFrame 作为多维元组的一项来实现这一点,例如:

data[0][1].Glucose.val
data[0][1].Glucose.time

我已经像这样预定义了元组:

data = tuple([data_type for _ in range(3)] for _ in range(8))

解决这个问题很好,但如果我尝试用新值填充 df,元组中的所有元素都会被覆盖:

for condition in range(8):
    for index in range(3):
        loop_it = condition + row_mult * index
        exp_setting = expIDs[loop_it]

        tempval = pd.read_csv(f"raw_data/{exp_setting}_Glucose.csv", delimiter="\t")
        rundata[condition][index].DOT.val = tempval.val.values
        rundata[condition][index].DOT.time = tempval.t

我到底做错了什么?

谢谢

元组是不可变的,因此您不能在不覆盖整个元组的情况下替换单个项目。 您可以改用 DataFrame 列表。

如果您的 DataFrame 都具有相同的形状,并且所有值都是数字,您还可以对所有数据仅使用一个多维 NumPy 数组,例如:

import numpy as np

data = np.array([[[1, 2], [3, 4]], 
                 [[5, 6], [7, 8]]]) 

# replace the first item in the second row of the first frame with 9 
data[0, 1, 0] = 9  

print(data)
[[[1 2]
  [9 4]]

 [[5 6]
  [7 8]]]

顺便说一句,pandas 在早期版本中确实有用于 3 维和 4 维 DataFrame 的特殊数据结构,但我想它们被发现是不必要的。 也许您可以将数据堆叠成一个二维的DataFrame。 为此,您可能需要查看 pandas 的 MultiIndex 功能。

如此处所述: 多维类列表 - 覆盖问题

问题是,我错过了正确初始化 class。

错误的:

data = tuple([data_type for _ in range(3)] for _ in range(8))

正确的:

data = tuple([data_type() for _ in range(3)] for _ in range(8))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM