如何按列对csv文件进行排序

时间:2018-09-24 14:27:11

标签: python python-3.x

我需要以一种非常特定的方式对.csv文件进行排序,但是对python的了解却非常有限,我有一些有效的代码,但它并没有真正做到我想要的功能,格式如下{ {1}}在csv中,无论dataA是什么,通常都会重复100-200次,有没有一种方法可以获取dataA(例如:examplecompany),并告诉我它重复多少次,然后告诉我dataC与dataA重复多少次?作为该行的第一项。例如输出可能是{header} {header} {header} {header} {dataA} {dataB} {datac} {dataD} ,我在解释事情时真的很糟糕,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用csv.DictReader来读取文件,然后对所需的密钥进行排序。

from csv import DictReader

with open("test.csv") as f:
    reader = DictReader(f)
    sorted_rows = sorted(list(reader), key=lambda x: x["column1"])

我使用(test.csv)测试过的CSV文件:

column1,column2
2,bla
1,blubb

答案 1 :(得分:0)

由于您没有提供任何代码或问题的完整输入/输出示例,因此尚不清楚要完成什么。

对我来说,您似乎想为headerA中的每个唯一数据计算headerC中某些数据的出现。

假设您具有以下.csv文件:

headerA,headerB,headerC,headerD
examplecompany1,datab,datac1,datad
examplecompany2,datab,datac2,datad
examplecompany2,datab,datac1,datad
examplecompany1,datab,datac2,datad
examplecompany1,datab,datac1,datad
examplecompany2,datab,datac2,datad
examplecompany1,datab,datac1,datad
examplecompany1,datab,datac2,datad
examplecompany1,datab,datac3,datad

您可以使用pandas完成此计数。以下是如何执行此操作的示例。

>>> import pandas as pd
>>> df = pd.read_csv('test.csv')
>>> df.groupby(['headerA'])['headerC'].value_counts()
headerA          headerC
examplecompany1  datac1     3
                 datac2     2
                 datac3     1
examplecompany2  datac2     2
                 datac1     1
Name: headerC, dtype: int64

在这里,groupby将使用headerA作为参考对DataFrame进行分组。您可以按单个系列或系列列表进行分组。之后,使用方括号表示法访问headerC列,value_counts将计算先前由headerC分组的headerA的每次出现。然后,您可以仅格式化所需的输出。

编辑: 我忘记了您也想获得headerA的出现次数,但这确实很简单,因为您可以通过选择headerA上的DataFrame df列并调用{{ 1}}。