【问题标题】:Get list with all values from all cells of pd DataFrame从 pd DataFrame 的所有单元格中获取所有值的列表
【发布时间】:2021-08-25 12:46:04
【问题描述】:

我有一个 pd Dataframe cooc_all(对称矩阵),我想从中创建一个列表,其中包含来自 DataFrame 的所有值。

目前,我这样做如下:

pd_list = []

for i in range(0,40):
    for j in range(i, 40):
        pd_list.append(cooc_all[j][i])

这是最好的方法吗?还是有更快/更短的方法?

【问题讨论】:

  • cooc_all.values.tolist()?
  • 请注意,cooc_all 是一个对称矩阵,只应捕获值的上半部分。您的方法捕获了所有内容,因此该列表包含许多 nan 值。

标签: python python-3.x pandas list dataframe


【解决方案1】:

试试ravel 然后tolist

outlist = df.values.ravel().tolist()

更新只获取上行程

idx = np.tril_indices(len(df))
df[idx] = np.nan
df.stack().tolist()

【讨论】:

  • 请注意问题中for j in range(i, 40)中的i
  • 请注意,cooc_all 是一个对称矩阵,只应捕获值的上半部分。您的方法捕获了所有内容,因此输出包含许多 nan 值。
【解决方案2】:

您可以使用np.tril 提取对称矩阵的下三角形,然后使用Fortran 顺序(列主要)将其展平以匹配您的列表,最后取出来自上侧的零:

>>> out = np.tril(df).ravel(order="F")
>>> out[out != 0].tolist()

【讨论】:

  • 谢谢@Mustafa。是否还有一种方法可以提取对称矩阵的顶部三角形?
  • @Emil 是的,np.triu :)u 表示上部,l 表示下部)
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多