【问题标题】:How can I get rid of "array[], dtype='<U12'我怎样才能摆脱 "array[], dtype='<U12'
【发布时间】:2020-08-10 05:22:12
【问题描述】:

我正在编写一个代码来分析不同产品的销售频率(StockCode),所以这是获取频率的代码:

stockCode = df['StockCode'].values.tolist()

non_repeated_list = []
frequencies = []
list2d= []

for i in stockCode:
    if i not in non_repeated_list:
        non_repeated_list.append(i)

for i in non_repeated_list:
    a = stockCode.count(i)
    frequencies.append(a)

然后用list2d = np.column_stack((non_repeated_list, frequencies)) 将两个列表堆叠在一个二维列表中,这样我就可以对它们进行排序:

print(sorted(list2d,key=lambda x:x[-1], reverse=True))

但是当我打印出来时它说:

[array(['22139', '993'], dtype='<U12'), array(['22911', '99'], dtype='<U12'), array(['17012D', '99'], dtype='<U12')...

所以我想问一下,我怎样才能得到 [] 之间的行?

【问题讨论】:

  • 你能提供一个示例数据框吗?我认为, for 循环不是必需的。我们可以直接从dataframe中获取。
  • 不要以“摆脱”这种或那种显示符号的方式思考。显示是次要的,是打印对象的产物。尝试了解显示器显示的内容。在这里,您有一个数组列表(或数组),每个数组都包含字符串。分别查看non_repeated_listfrequencies。你真的需要将它们组合成一个数组吗?

标签: python arrays pandas list numpy


【解决方案1】:

由于您没有提供一个最小的、可重现的示例,我将尝试重新创建一个。

我猜df 是一个数据框,df['StockCode'] 是包含字符串的系列:

In [287]: ds = pd.Series(['one','two','one','three','two'])                                            
In [288]: ds                                                                                           
Out[288]: 
0      one
1      two
2      one
3    three
4      two
dtype: object

然后我们得到一个字符串列表:

In [289]: x = ds.values.tolist()                                                                       
In [290]: x                                                                                            
Out[290]: ['one', 'two', 'one', 'three', 'two']

并找到唯一的:

In [291]: alist = []                                                                                   
In [292]: for i in x: 
     ...:     if i not in alist: 
     ...:         alist.append(i) 
     ...:                                                                                              
In [293]: alist                                                                                        
Out[293]: ['one', 'two', 'three']

数一数:

In [294]: freq = []                                                                                    
In [295]: for i in alist: 
     ...:     freq.append(x.count(i)) 
     ...:                                                                                              
In [296]: freq                                                                                         
Out[296]: [2, 2, 1]

两个字符串的column_stack产生一个二维数组,字符串dtype:

In [297]: np.column_stack((alist, freq))                                                               
Out[297]: 
array([['one', '2'],
       ['two', '2'],
       ['three', '1']], dtype='<U21')

column_stack 无法生成列表或数组数组,因此您必须做更多的事情。

Python sorted 会将数组视为一个列表,与 `list(..) 相同,或者是二维数组上的列表推导:

In [298]: [a for a in _]                                                                               
Out[298]: 
[array(['one', '2'], dtype='<U21'),
 array(['two', '2'], dtype='<U21'),
 array(['three', '1'], dtype='<U21')]

您可以使用以下方法重新加入数组:

In [299]: np.vstack(_)                                                                                 
Out[299]: 
array([['one', '2'],
       ['two', '2'],
       ['three', '1']], dtype='<U21')

【讨论】:

  • 是的,你是对的,我忘了放我用来按频率排序的代码,我只是编辑了它
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多