Moh*_*ahi 4 python dataframe pandas
我有一个像这样的数据框:
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['aa', 'b', 'c']})
A B
0 1 aa
1 2 b
2 3 c
Run Code Online (Sandbox Code Playgroud)
我想将每一行列转换B为一个列表。例如,我想要的输出是这样的:
df_new
A B
0 1 [aa]
1 2 [b]
2 3 [c]
Run Code Online (Sandbox Code Playgroud)
我认为评论的解决方案非常快:
\ndf['B'] = df['B'].map(lambda i: [i])\nRun Code Online (Sandbox Code Playgroud)\n使用列表理解更快:
\ndf['B'] = [[i] for i in df['B']]\nRun Code Online (Sandbox Code Playgroud)\n表现:
\ndf = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['as', 'b', 'c']})\n\n#30k rows\ndf = pd.concat([df] * 10000, ignore_index=True)\n\n\nIn [93]: %timeit df['B'].apply(lambda x: x.split(','))\n11.1 ms \xc2\xb1 963 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\nIn [94]: %timeit df['B'].str.split()\n13.1 ms \xc2\xb1 788 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\n\nIn [96]: %timeit df['B'].map(lambda i: [i])\n7.15 ms \xc2\xb1 54.8 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\nIn [97]: %timeit df['B'].apply(lambda i: [i])\n7.21 ms \xc2\xb1 48.9 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\nIn [98]: %timeit df['B'].str.split(',')\n13.9 ms \xc2\xb1 1.46 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\n\nIn [99]: %timeit [[i] for i in df['B']]\n5.84 ms \xc2\xb1 73.3 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\nRun Code Online (Sandbox Code Playgroud)\n
小智 6
您可以使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3207 次 |
| 最近记录: |