【发布时间】: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