在Python-Pandas中生成数据透视表?努比?Xlrd?来自csv
我已经搜索了几个小时,几乎一整天都在研究如何用Python生成透视表。我对python很陌生,所以请容忍我 我想要的是获取一个csv文件,提取第一列并使用该列中数字的计数或频率生成一个数据透视表,然后按降序排序在Python-Pandas中生成数据透视表?努比?Xlrd?来自csv,python,excel,numpy,pandas,pivot,Python,Excel,Numpy,Pandas,Pivot,我已经搜索了几个小时,几乎一整天都在研究如何用Python生成透视表。我对python很陌生,所以请容忍我 我想要的是获取一个csv文件,提取第一列并使用该列中数字的计数或频率生成一个数据透视表,然后按降序排序 import pandas import numpy from numpy import recfromtxt a = recfromtxt('1.csv', skiprows=1, usecols=0, delimiter=',') print a ^这里我得到的是第一列
import pandas
import numpy
from numpy import recfromtxt
a = recfromtxt('1.csv', skiprows=1, usecols=0, delimiter=',')
print a
^这里我得到的是第一列的列表[2 6 7]
我需要的是导出两列
2-3
6-1
7-1你看了这里吗 否则,根据您的示例,您可能只使用列表理解:
>>> l = [2,2,2,6,7]
>>> [(i, l.count(i)) for i in set(l)]
[
(2,3),
(6,1),
(7,1)
]
甚至是词典理解,取决于您需要什么:
>>> l = [2,2,2,6,7]
>>> {i:l.count(i) for i in set(l)}
{
2: 3,
6: 1,
7: 1
}
编辑(来自@Peter DeGlopper的建议)
另一种更有效的使用方法(请阅读下面的评论):
你看过这里吗 否则,根据您的示例,您可能只使用列表理解:
>>> l = [2,2,2,6,7]
>>> [(i, l.count(i)) for i in set(l)]
[
(2,3),
(6,1),
(7,1)
]
甚至是词典理解,取决于您需要什么:
>>> l = [2,2,2,6,7]
>>> {i:l.count(i) for i in set(l)}
{
2: 3,
6: 1,
7: 1
}
编辑(来自@Peter DeGlopper的建议)
另一种更有效的使用方法(请阅读下面的评论):
请参阅以下内容:,如果您可以访问Python
collections.Counter类(2.7或更高版本),并且不需要将count数组指定为numpy数组,则该类非常容易实现。您可以从collections.Counter(np.nditer(a))
生成一个。如果您需要numpy
输出,并且您的数据是非负整数,那么看起来bincount
将是一个开始:@PeterDeGlopper在numpy中,如果您的项不是非负整数,您将执行类似unq,u=np.unique(a,reverse\u index=True)的操作;cnts=np.bincount(41;
,现在unq
和cnts
是您的两列。@Jaime-返回反向
而不是反向索引
,对吗?您可能还需要return\u index
,以便更容易地将计数与数组项进行匹配。不过,这很聪明。@peterdegloper是的,没错,return\u inverse
。。。我在这里的某个地方写过,这最终将成为np.bincount
的标准功能,因为我发现自己编写这些do行代码的次数太多了。请参见以下内容:,Python集合.Counter
类使这一点非常容易,如果您有权访问它(2.7或更高版本)并且不需要将count数组指定为numpy数组。您可以从collections.Counter(np.nditer(a))
生成一个。如果您需要numpy
输出,并且您的数据是非负整数,那么看起来bincount
将是一个开始:@PeterDeGlopper在numpy中,如果您的项不是非负整数,您将执行类似unq,u=np.unique(a,reverse\u index=True)的操作;cnts=np.bincount(41;
,现在unq
和cnts
是您的两列。@Jaime-返回反向
而不是反向索引,对吗?您可能还需要return\u index
,以便更容易地将计数与数组项进行匹配。不过,这很聪明。@peterdegloper是的,没错,return\u inverse
。。。我在这里的某个地方写过,这将最终成为np.bincount
的一个标准特性,因为我发现自己编写这些do行代码的次数太多了。这将对列表长度产生二次性能,由于count
每次都必须遍历整个列表,因此使用集合可以做得更好。计数器
或defaultdict
可以在一次遍历列表中累积运行总数。这是真的,不过为了简单起见(对于python初学者),如果列表不是很大,我认为大多数现代机器都能毫无问题地处理这个问题。如果性能是一个关键问题,那么事实上,你是完全正确的,有很多方法可以优化它。这将使性能与列表长度成二次关系,由于count
每次都必须遍历整个列表,因此使用集合可以做得更好。计数器
或defaultdict
可以在一次遍历列表中累积运行总数。这是真的,不过为了简单起见(对于python初学者),如果列表不是很大,我认为大多数现代机器都能毫无问题地处理这个问题。如果性能是一个关键问题,那么事实上,您完全正确,有很多方法可以优化它。