将多列中的所有值设置为空列表 pandas

Set all the values in multiple columns to empty lists pandas

我有一个数据框,它的列中有列表或值;类似于以下内容:

df
     A        B        C      D
0   []      [3]    ['ON']     5
1   'a'   ['a']    ['ON']     5
2    5      [3]    ['ON']     5
3   []      [3]    ['ON']     5
...

我想用空列表替换 ABC 列中的所有值。我尝试对 ABC 列分别使用 .assign(column_name='value')。我可以设置一个值,但我不能设置一个空列表。我不想使用 .apply(lambda x: []),因为它很慢。

还有其他方法吗?

预期结果:

df
     A    B    C    D
0   []   []   []    5
1   []   []   []    5
2   []   []   []    5
3   []   []   []    5
...

我基本上需要的是一个 pandas 函数,它可以做:change everything in columns=['A','B','C'] to []

您可以使用:

df['A'] = [[]]*len(df)

尝试使用列表理解设置列。

例如

empty_col = [[] for x in range(len(df))]
df['A'] = empty_col
df['B'] = empty_col
df['C'] = empty_col
>>> df
         A    B    C    D
    0   []   []   []    5
    1   []   []   []    5
    2   []   []   []    5
    3   []   []   []    5
...     

df['A'] = [np.empty(0,dtype=float)]*len(df)
df['B'] = [np.empty(0,dtype=float)]*len(df)
df['C'] = [np.empty(0,dtype=float)]*len(df)

性能比较:

种子数据:

df = pd.DataFrame(columns=['A'])
for i in range(100):
    df = df.append({'A': i}, ignore_index=True)
df

有 1000 个元素: 396 µs 对比 613 µs

具有 10 000 个元素: 1.06 毫秒与 4.33 毫秒

100 000 个元素: 8.87 毫秒与 45.9 毫秒