将多列中的所有值设置为空列表 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
...
我想用空列表替换 A
、B
和 C
列中的所有值。我尝试对 A
、B
和 C
列分别使用 .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 毫秒
我有一个数据框,它的列中有列表或值;类似于以下内容:
df
A B C D
0 [] [3] ['ON'] 5
1 'a' ['a'] ['ON'] 5
2 5 [3] ['ON'] 5
3 [] [3] ['ON'] 5
...
我想用空列表替换 A
、B
和 C
列中的所有值。我尝试对 A
、B
和 C
列分别使用 .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 毫秒