我正在将PsychoPy与Pandas配合使用以对数据框中的结果重新排序。问题在于数据帧将根据参与者的表现而变化。但是,我希望有一个通用的数据框,其中不存在的列被创建为空。然后,列必须在输出文件中按特定顺序排列。
假设我有一个参与者的数据框,其中包含以下几列:
x = ["Error_1", "Error_2", "Error_3"]
我希望最终的数据帧看起来像这样:
x = x[["Error_1", "Error_2", "Error_3", "Error_4"]]
其中"Error_4"
被创建为空列的位置。
我尝试应用这样的内容(从另一个问题改编而成):
if "Error_4" not in x:
x["Error_4"] = ""
x = x[["Error_1", "Error_2", "Error_3", "Error_4"]]
原则上应该可以,但是我还有其他70个专栏应该做,而且似乎不适合每个专栏。
您有什么建议吗?
我还尝试用所有可能的列创建一个新的数据框,例如:
y = ["Error_1", "Error_2", "Error_3", "Error_4"]
但是,我仍然不清楚如何合并具有相同标题的数据帧x
和y
跳过列。
答案 0 :(得分:1)
x = x.reindex(["Error_1", "Error_2", "Error_3", "Error_4"], axis=1, fill_value='')
答案 1 :(得分:0)
感谢您的回复,我按照您的建议进行了修改。我将其发布在这里,因为它可能对其他人有用。
首先,我要创建一个数据框y
,因为我希望输出看起来像这样:
y = ["Error_1", "Error_2", "Error_3", "Error_4", "Error_5", "Error_6"]
然后,我得到了实际的输出文件df
并将其修改为df2
,并以完全相同的顺序向其中添加了y
的所有列。
df = pd.DataFrame(myData)
columns = df.columns.values.tolist()
df2 = df.reindex(columns = y, fill_value='')
在这种情况下,df2
中不存在但y
中存在的所有列都将添加到df2
中。
但是,假设df2
中"Error_7"
中没有一列y
。为了跟踪这些列,我只是应用merge
并创建一个新的数据框df3
:
df3 = pd.merge(df2,df)
df3.to_csv(filename+'UPDATED.csv')
缺少的列将添加到数据框的末尾。
如果您认为此过程可能有缺点,或者有另一种方法可以解决,请告诉我:)