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