【问题标题】:How to combine two columns containing np.arrays to one column [duplicate]如何将包含 np.arrays 的两列合并为一列[重复]
【发布时间】:2021-12-26 23:28:36
【问题描述】:

我正在读取包含列中的数组的 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]]

【问题讨论】:

  • df['col3'] = df['col1'].agg(np.ndarray.tolist) + df['col2'].agg(np.ndarray.tolist) 虽然如果您的列已经是一个要添加的列表然后转换为数组df['col3'] = (df['col1'] + df['col2']).agg(np.array),它可能会更有效
  • df 最初创建的列中有列表。如副本所示,df['col1']+df['col2'] 有效。转换为数组使这成为不可能。您如何执行“总是结束”步骤?但是当从csv 加载时,你真的得到列表了吗?或者它们是看起来像列表的字符串? pandas 显示不区分这三种情况。
  • 当我读取 csv 文件时,它是一个字符串,这就是我应用 lambda 函数的原因。我尝试了 df['col1']+df['col2'],我尝试了 .apply(''.join,1) .apply(lambda x: x.to_numpy(), 1) 和几个不同的函数,但没有任何结果首选结果。

标签: python pandas numpy numpy-ndarray


【解决方案1】:

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

由于这些项目是 numpy 数组,它们以不同的方式定义彼此的加法(即,将每个数组中的每个单独的值一起添加到相同形状的新数组中,而不是像 Python lists 那样串联),你'需要先将 numpy 数组转换为 Python 列表,使用 .apply(list):

df['col3'] = df['col1'].apply(list) + df['col2'].apply(list)

【讨论】:

  • 感谢您的帮助!有用。你能分享一个重复的链接吗,虽然我在问这个问题之前查看了所有相关问题。
  • 如果您查看此问题的顶部,您应该会看到一个包含问题链接的蓝色框。无论如何,这里是:stackoverflow.com/questions/51870724/…
猜你喜欢
  • 2021-01-23
  • 2019-05-28
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
相关资源
最近更新 更多