df = pd.DataFrame({'col1': ['A', 'B', 'C'], 'col2': ["1,2,3", 'a,b', '三,四']}) df df['col3'] = df['col2'].str.split(',', expand=True) Expected a 1D array, got an array with shape (3, 3)
时间: 2023-08-20 21:29:27 浏览: 146
出现这个错误是因为 `df['col2'].str.split(',', expand=True)` 返回的是一个二维数组(shape为(3,3)),而 `df['col3']` 的期望是一个一维数组。
如果您只想将 `col2` 列中的逗号分隔的数据拆分成多个子列并插入到 `df` 中,可以使用以下代码:
```python
import pandas as pd
df = pd.DataFrame({'col1': ['A', 'B', 'C'], 'col2': ["1,2,3", 'a,b', '三,四']})
df[['col3_1', 'col3_2', 'col3_3']] = df['col2'].str.split(',', expand=True)
df = df.drop(columns=['col2'])
print(df)
```
输出结果:
```
col1 col3_1 col3_2 col3_3
0 A 1 2 3
1 B a b None
2 C 三 四 None
```
在上面的代码中,我们使用 `df[['col3_1', 'col3_2', 'col3_3']] = df['col2'].str.split(',', expand=True)` 将拆分后的多个子列插入到新的列 `col3_1`、`col3_2` 和 `col3_3` 中。然后,我们使用 `df.drop(columns=['col2'])` 删除原始的 `col2` 列。
如果您只需要将拆分后的多个子列合并成一列,可以使用以下代码:
```python
import pandas as pd
df = pd.DataFrame({'col1': ['A', 'B', 'C'], 'col2': ["1,2,3", 'a,b', '三,四']})
df['col3'] = df['col2'].str.split(',', expand=True).apply(lambda x: ','.join(x.dropna().astype(str)), axis=1)
df = df.drop(columns=['col2'])
print(df)
```
输出结果:
```
col1 col3
0 A 1,2,3
1 B a,b
2 C 三,四
```
在上面的代码中,我们使用 `df['col2'].str.split(',', expand=True)` 将 `col2` 列中的逗号分隔的数据拆分成多个子列,并使用 `apply()` 方法将每一行中的非空子列连接成一个新的字符串。最后,我们将新的字符串列 `col3` 插入到原始 `DataFrame` 中,并删除原始的 `col2` 列。
阅读全文