将元组的numpy数组转换为2D数组

时间:2019-12-22 12:54:13

标签: python pandas numpy tuples numpy-ndarray

我有一个pandas DataFrame,其中的一列是由float的元组组成的。当我使用public class MyClass { private static Context mContext; public static getInstance(Context context) { mContext = context; return new MyClass(); } private MyClass() {} public void getDreamValue() { Settings.Secure.getInt(mContext.getContentResolver(), "dream_val", -1); } } 时,最终得到一维元组数组,但我需要一个二维浮点数组。

到目前为止,我的解决方案是使用arr = df['col_name'].to_numpy()。这可行,但是先转换为列表然后转换为数组似乎效率低下。所以我想知道,还有更好的方法吗?

This question是相关的,但是唯一的答案指向以不同的方式读取文本文件,这对我来说不是一个选择,因为数据已经在DataFrame中。

1 个答案:

答案 0 :(得分:0)

如果您的 col_name 包含实际元组,请运行:

pd.DataFrame(df['col_name'].apply(pd.Series))

但是,如果您已阅读DataFrame,例如从一个CSV文件中,然后每个 col_name 的元素实际上包含由以下组成的字符串

  • 左括号
  • 由逗号分隔的数字序列(写为字符串)
  • 右括号

,它仅看起来像元组。

如果是这种情况,请运行:

pd.DataFrame(df['col_name'].apply(lambda txt: pd.Series(eval(txt))))

在两种情况下,结果都是一个DataFrame。如果需要,将其转换为 Numpy 数组。

检查 col_name 是否包含字符串或 实际的元组,使用 Jupyter ,运行:

df.col_name.iloc[0]

如果结果为'(2.15, 3.03, 4.07)'(用引号引起来),则为 字符串。但是,如果您收到(2.15, 3.03, 4.07)(不带引号),则为 元组

另一种检查方法是运行type(df.col_name.iloc[0])。 您应该得到 tuple str

相关问题