Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python-Pandas中生成数据透视表?努比?Xlrd?来自csv_Python_Excel_Numpy_Pandas_Pivot - Fatal编程技术网

在Python-Pandas中生成数据透视表?努比?Xlrd?来自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 ^这里我得到的是第一列

我已经搜索了几个小时,几乎一整天都在研究如何用Python生成透视表。我对python很陌生,所以请容忍我

我想要的是获取一个csv文件,提取第一列并使用该列中数字的计数或频率生成一个数据透视表,然后按降序排序

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初学者),如果列表不是很大,我认为大多数现代机器都能毫无问题地处理这个问题。如果性能是一个关键问题,那么事实上,您完全正确,有很多方法可以优化它。