使用预定义的顺序按索引列对csv文件重新排序

我正在尝试对用python生成的csv文件进行重新排序,但无法使其正常工作,

数据为:

metrics   test1 test2 test3 test4 ...
aa-key1
aa-key3
bb-key4
cc--key2
dd--key5
...

键没有按字母或数字排序。它只需要作为预定义的顺序[key1,key2,key3,key4,key5]。我添加了aa,cc,bb dd来说明我总是得到的顺序。有什么方法可以按第一列对表格进行重新排序,而CSV则要

metrics   test1 test2 test3 test4 ...
aa-key1
cc--key2
aa-key3
bb-key4
dd--key5
...

我通过在创建后附加各列来用熊猫生成了csv。尽管我将字典定义为orderedDict,但是顺序似乎并没有受到影响。

def create_csv(infile,result):
    dict = parse_log_to_dict(infile)

    with open(result,'w') as f:
        writer = csv.writer(f)
        writer.writerow(['metrics',get_file_name_only(infile)])
        for row in dict.items():
           writer.writerow(row)

我尝试过:

  PREPERED_INDEX = [key1,key2,key3,key4,key5]
  reporter_df = pd.read_csv(result,index_col=0)
  reporter_df[0] = pd.Categorical(reporter_df[0],PREPERED_INDEX)
    reporter_df.sort_values('metrics')
    reporter_df.to_csv(result)

但是在度量标准上出现了keyError,这是我打算在表格中显示的标题行。

谢谢!

hd7429 回答:使用预定义的顺序按索引列对csv文件重新排序

因此,我使用类似于您似乎拥有的数据创建了一个csv,我使用了delimiter =“;”因为我的.csv是这样分开的,所以您可能不需要它:

df = pd.read_csv(r"D:\Dokumente\example.csv",delimiter=";")

输出:

    metrics  test1
0   key1         1
1   key4         4
2   key2         2
3   key5         5
4   key3         3

然后,如果仅按“指标”列对其进行排序,则它应该完成您想要实现的目标:

df = df.sort_values("metrics")

输出:

  metrics  test1
0    key1      1
2    key2      2
4    key3      3
1    key4      4
3    key5      5

我相信通过使用index_col = 0,您会将整个列用作索引,并且无法再通过键“ metrics”对其进行访问。对我来说,当我尝试重现它时,这似乎是问题所在。

另外,如果您担心索引混乱,则可以在下一步中使用以下命令重置它:

df = df.reset_index(drop=True)

然后将其返回给df:

  metrics  test1
0    key1      1
1    key2      2
2    key3      3
3    key4      4
4    key5      5

希望这会有所帮助。

本文链接:https://www.f2er.com/3164034.html

大家都在问