如何将包含 np.arrays 的两列合并为一列

How to combine two columns containing np.arrays to one column

我正在读取一个 CSV 文件,其中列中包含数组。我想将列中的列表连接到一个只包含一个列表的新列中,因为我必须对其进行一些转换。

d = {'col1': [[1,2], [1,2],[1,2]], 'col2': [[1,2], [], [1,2,4,5,6,7]]}
df = pd.DataFrame(data=d)
    col1    col2
0   [1, 2]  [1, 2]
1   [1, 2]  []
2   [1, 2]  [1, 2, 4, 5, 6, 7]

第一步,我将它们转换为数值数组。

df["col1"] = df['col1'].apply(lambda x : np.fromstring(str(x).replace('[','').replace(']',''), sep=',').astype(int))
df["col2"] = df['col2'].apply(lambda x : np.fromstring(str(x).replace('[','').replace(']',''), sep=',').astype(int))

在第二步中,我想将它们合并到一列中。

    col1    col2                col3
0   [1, 2]  [1, 2]              [1, 2, 1, 2]
1   [1, 2]  []                  [1, 2]  
2   [2, 3]  [1, 2, 4, 5, 6, 7]  [2, 3, 1, 2, 4, 5, 6, 7]

但我总是以

结束
    col1    col2                col3
0   [1, 2]  [1, 2]              [[1, 2], [1, 2]]
1   [1, 2]  []                  [[1, 2], []]  
2   [2, 3]  [1, 2, 4, 5, 6, 7]  [[2, 3], [1, 2, 4, 5, 6, 7]]

因为您可以在 Python 中使用加法 (+) 将多个列表组合在一起(例如 [1,2] + [3,4] == [1,2,3,4]),所以您可以使用 Pandas 系列做完全相同的事情.

因为这些项目是 numpy 数组,它们以不同的方式定义彼此的加法(即,将每个数组中的每个单独值加在一起形成一个相同形状的新数组,而不是像 Python lists 做),您需要首先使用 .apply(list):

将 numpy 数组转换为 Python 列表
df['col3'] = df['col1'].apply(list) + df['col2'].apply(list)