已经玩了一段时间了。我正在处理测试数据,其中我有一系列测试点,一系列传感器,对于每个传感器,我都有min/max/avg/stdev数据。
我曾考虑过简单地附加例如"_min";并创建nColumns*3宽度的数据帧。但是这感觉很笨拙——当我调用来绘制变量时,我将不得不处理字符串值来添加后缀…感觉很笨拙。
多索引似乎是正确的方法,这将允许我单独处理传感器名称和测量。
我目前正在读取的数据如下:
data = pd.read_excel(os.path.join(working_path, working_dir, staticDataFileName),
sheet_name='sheet', skiprows = 6, nrows=2000, usecols = 'A,D:G', names = ["Tag", "Min", "Max", "Avg", "Stdev"], dtype={'Tag': str})
然后,我将数据帧拆分为每个单独的变量。
df_min = data[["Tag", "Min"]]
...
我目前有一些代码,我只有一个平均值。
temp = readRawData(wd, f, dataset)
# Drop the bad rows
temp.drop(temp.index[temp['Tag'] == '0'], inplace = True)
temp2 = temp.T
temp2.rename(columns=temp2.iloc[0], inplace = True)
temp2.drop(temp2.index[0], inplace = True)
我需要转换数据帧以将标记名设置为列,然后将列设置为标记名。然后我删除第一个索引,现在它只是标签名称。在我的代码中,我循环遍历所有文件,并使用为所有数据点创建数据帧
data = pd.concat([data, temp2])
在那里的某个地方,我需要弄清楚如何创建这个多索引数据帧。pandas用户指南LINK中给出的大多数示例的索引都是多级的,而不是列。他们举的例子。。我很难跟上。
我正在寻找如何获取一系列看起来像的数据帧的指导
df_min
Tag1 Tag2 TagN
0 min1 min2 minN
df_avg
Tag1 Tag2 TagN
0 avg1 avg2 avgN
并将它们组合成
df
Tag1 Tag2 ... TagN
Min Max Avg Min Max Avg Min Max Avg
0 min1 max1 avg1 min2 max2 avg2 minN maxN avgN
当然,这是一个糟糕的主意,请告诉我。谢谢
我能够通过使用这里的解决方案来实现这一点:https://stackoverflow.com/a/47338266/14066896
它不漂亮。。。但它似乎在上工作
for f in staticDataFileName:
temp_all = readRawData(wd, f)
temp_all.drop(temp_all.index[temp_all['Tag'] == '0'], inplace = True)
column_list = []
steady_dict = dict()
temp = temp_all.T
temp.rename(columns=temp.iloc[0], inplace=True)
temp.drop(temp.index[0], inplace=True)
temp.reset_index(inplace=True)
temp.drop(columns=['index'], inplace=True)
#create column names
for column in temp.columns:
column_list.append((column, "Min"))
column_list.append((column, "Max"))
column_list.append((column, "Avg"))
column_list.append((column, "Stdev"))
j = 0
for columnName, columnData in temp.iteritems():
temp_dict = dict()
temp_dict["Min"] = temp.iloc[0, j]
temp_dict["Max"] = temp.iloc[1, j]
temp_dict["Avg"] = temp.iloc[2, j]
temp_dict["Stdev"] = temp.iloc[3, j]
j += 1
steady_dict[columnName] = temp_dict
t = pd.DataFrame(steady_dict).unstack().to_frame().T
t.columns = pd.MultiIndex.from_tuples(column_list)
#correctStaticData(temp2, wd2)
data = pd.concat([data, t])