既然有人已经发布了
defaultdict解决方案,那么我将为熊猫提供一个解决方案。
pandas是一个非常方便的数据处理库。除了其他出色的功能外,它还可以根据需要的输出而在一行中处理该计数问题。真:
df = pd.read_csv("cluster.csv")counted = df.groupby(["Cluster_id", "User", "Quality"]).size()df.to_csv("counted.csv")
-
只是为了提供
pandas易于使用的预告片,我们可以加载文件-其中的主要数据存储对象
pandas称为“ Dataframe”:
>>> import pandas as pd>>> df = pd.read_csv("cluster.csv")>>> df<class 'pandas.core.frame.Dataframe'>Int64Index: 500000 entries, 0 to 499999Data columns:Tag500000 non-null valuesUser 500000 non-null valuesQuality 500000 non-null valuesCluster_id 500000 non-null valuesdtypes: int64(1), object(3)
我们可以检查一下前几行是否正常:
>>> df[:5] Tag User Quality Cluster_id0 bbb u001 bad 391 bbb u002 bad 362 bag u003 good 113 bag u004 good94 bag u005 bad 26
然后我们可以按Cluster_id和User分组,并在每个组上进行工作:
>>> for name, group in df.groupby(["Cluster_id", "User"]):... print 'group name:', name... print 'group rows:'... print group... print 'counts of Quality values:'... print group["Quality"].value_counts()... raw_input()... group name: (1, 'u003')group rows: Tag User Quality Cluster_id372002 xxx u003 bad1counts of Quality values:bad 1group name: (1, 'u004')group rows:Tag User Quality Cluster_id126003 ground u004 bad1348003 ground u004 good1counts of Quality values:good 1bad 1group name: (1, 'u005')group rows:Tag User Quality Cluster_id42004 ground u005 bad1258004 ground u005 bad1390004 ground u005 bad1counts of Quality values:bad 3[etc.]
如果您要进行大量
csv文件处理,那么绝对值得一看。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)