python - 使用数组元组中的列构建 DataFrame

标签 python pandas numpy dataframe

我正在努力完成从 np.unique(arr, return_counts=True) 生成的元组中按值构建计数 DataFrame 的基本任务,例如:

import numpy as np
import pandas as pd

np.random.seed(123)  
birds=np.random.choice(['African Swallow','Dead Parrot','Exploding Penguin'], size=int(5e4))
someTuple=np.unique(birds, return_counts = True)
someTuple
#(array(['African Swallow', 'Dead Parrot', 'Exploding Penguin'], 
#       dtype='<U17'), array([16510, 16570, 16920], dtype=int64))

第一次尝试

pd.DataFrame(list(someTuple))
# Returns this:
#                  0            1                  2
# 0  African Swallow  Dead Parrot  Exploding Penguin
# 1            16510        16570              16920

我也试过 pd.DataFrame.from_records(someTuple),它返回相同的东西。

但我要找的是这个:

#              birdType      birdCount
# 0     African Swallow          16510  
# 1         Dead Parrot          16570  
# 2   Exploding Penguin          16920

什么是正确的语法?

最佳答案

这是一个基于 NumPy 的解决方案 np.column_stack -

pd.DataFrame(np.column_stack(someTuple),columns=['birdType','birdCount'])

或用np.vstack -

pd.DataFrame(np.vstack(someTuple).T,columns=['birdType','birdCount'])

基准测试 np.transposenp.column_stacknp.vstack 用于将 1D 数组放入列中以形成一个 2D 数组 -

In [54]: tup1 = (np.random.rand(1000),np.random.rand(1000))

In [55]: %timeit np.transpose(tup1)
100000 loops, best of 3: 15.9 µs per loop

In [56]: %timeit np.column_stack(tup1)
100000 loops, best of 3: 11 µs per loop

In [57]: %timeit np.vstack(tup1).T
100000 loops, best of 3: 14.1 µs per loop

关于python - 使用数组元组中的列构建 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087136/

相关文章:

python - 在 unittest 中比较(断言相等)两个包含 numpy 数组的复杂数据结构

python - 如何在有限的时间内通过 pika 消费 RabbitMQ 消息?

python - 如何部分读取巨大的 CSV 文件?

python - 减少日期值以仅显示一年内的 2 个字符 (Pandas)

python - 绘制相对于数据的标记大小以绘制交互式晶圆图

python - 向数据点添加 X-Y 偏移

python - 在循环中更新一行,然后在下一次迭代中使用更新后的值

python - 在 Pandas 中合并两行(一个有值,另一个为 NaN)

Python如何在numpy中组合两个矩阵

python - 迭代一个 numpy 矩阵行