【问题标题】:reorder the csv file by index column with predefined order使用预定义的顺序按索引列重新排序 csv 文件
【发布时间】:2019-11-04 20:08:43
【问题描述】:

我正在尝试重新排序我使用 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
...

我已经用 panda 生成了 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,这是我本应在表格中显示的标题行。

谢谢!

【问题讨论】:

    标签: python pandas csv row


    【解决方案1】:

    所以我创建了一个 csv,其中的数据与您似乎拥有的数据相似,我使用了分隔符 =“;”因为我的 .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 您将整个列用作索引,并且不能再通过键“指标”访问它。至少对我来说,当我尝试重现它时,这似乎是这里的问题。

    此外,如果您担心索引混乱,您可以在下一步重置它:

    df = df.reset_index(drop=True)
    

    然后为 df 返回这个:

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复。但是,key1-key5 是任意名称,例如:'auto(key2)、bike(key1)、car(key4)、drum (key3)',我不希望它们被排序,而是使用预定义的顺序作为 PREPERED_INDEX = [自行车,汽车,鼓,汽车]。但我的结果是按字母顺序排序的:汽车、自行车、汽车、鼓
    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2021-03-22
    • 1970-01-01
    • 2021-01-07
    • 2014-12-20
    • 2023-01-17
    相关资源
    最近更新 更多