我有一个像这样的数据框:
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['aa', 'b', 'c']})
A B
0 1 aa
1 2 b
2 3 c
我希望将列
B
中的每一行转换为列表。例如,我的期望输出类似于以下内容: df_new
A B
0 1 [aa]
1 2 [b]
2 3 [c]
我认为评论中的解决方案非常快速:
df['B'] = df['B'].map(lambda i: [i])
df['B'] = [[i] for i in df['B']]
性能:
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['as', 'b', 'c']})
#30k rows
df = pd.concat([df] * 10000, ignore_index=True)
In [93]: %timeit df['B'].apply(lambda x: x.split(','))
11.1 ms ± 963 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [94]: %timeit df['B'].str.split()
13.1 ms ± 788 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [96]: %timeit df['B'].map(lambda i: [i])
7.15 ms ± 54.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [97]: %timeit df['B'].apply(lambda i: [i])
7.21 ms ± 48.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [98]: %timeit df['B'].str.split(',')
13.9 ms ± 1.46 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [99]: %timeit [[i] for i in df['B']]
5.84 ms ± 73.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
你可以使用split函数来处理操作。
import pandas as pd
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['a', 'b', 'c']})
df['B'] = df['B'].apply(lambda x: x.split(','))
print(df)
apply
,只需要使用 df['B'] = df['B'].str.split()
就可以了吧? - sophoclesapply
的情况下获得相同的结果,那么不使用apply
会更好吧? - sophoclesdf['B'].apply(lambda x: x.split(','))
在这里的最佳使用方式。但是完全同意 df['B'] = df['B'].str.split()
是更好的解决方案。它稍微慢一些,但如果有 NaN 或数字不失败,就像 df['B'].apply(lambda x: x.split(','))
那样。 - jezraelapply
:df['B'] = df['B'].apply(list)
A B
0 1 [a]
1 2 [b]
2 3 [c]
a
改为 as
,得到列表 ['a', 's']
。 - jezrael