python - pandas 内的 np reshape 应用

标签 python pandas numpy reshape

出现异常:数据必须是一维的。

为了清楚起见,我将通过一个玩具示例来展示该问题。

import pandas as pd
import numpy as np

初始数据框:

df = pd.DataFrame({"A": [[10,15,12,14],[20,30,10,43]], "R":[2,2] ,"C":[2,2]})
>>df

       A                    C   R
0   [10, 15, 12, 14]    2   2
1   [20, 30, 10, 43]    2   2

转换为 numpy 数组并 reshape :

df['A'] = df['A'].apply(lambda x: np.array(x))
df.apply(lambda x: print(x[0],(x[1],x[2])) ,axis=1)
df['A_reshaped'] = df.apply(lambda x[['A','R','C']]: np.reshape(x[0],(x[1],x[2])),axis=1)
df

       A                    C    R           A_reshaped
0   [10, 15, 12, 14]    2   2        [[10,15],[12,14]]
1   [20, 30, 10, 43]    2   2        [[20,30],[10,43]]

有人知道原因吗?它似乎不接受 pandas 单元格中的二维数组,但这很奇怪......

预先感谢您的帮助!!!

最佳答案

直接使用 apply 不起作用 - 返回值是一个 numpy 二维数组,出于某种原因,将其放回 DataFrame 会让 Pandas 感到困惑。

不过,这似乎有效:

df['reshaped'] = pd.Series([a.reshape((c, r)) for (a, c, r) in zip(df.A, df.C, df.R)])

>>> df
                  A  C  R              reshaped
0  [10, 15, 12, 14]  2  2  [[10, 15], [12, 14]]
1  [20, 30, 10, 43]  2  2  [[20, 30], [10, 43]]

关于python - pandas 内的 np reshape 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621965/

相关文章:

python - 如何导入扩展名为.xls的旧Excel文件?

python - Pandas:散点图,其点的大小由一列的唯一值与另一列的相应值的大小决定

python - 如何在 Pandas 中读取带有空格分隔值的文件

python - 如何迭代 Pandas 行并根据行中的排名修改每个单元格?

python - NumPy 对象方法和 NumPy 函数调用有什么区别?

python - 将列表与列表字典进行比较的最快方法

python - 按比例将图像裁剪到最大的中心部分

python - 如何在 numpy 中对 3 个向量进行外积来创建 3d 矩阵? (与 nd 相同)

python - Pandas get_level_values 表现出乎意料

Python:根据其他两列的值有条件地创建新列