dataframe某列为list,拆分成为新的dataframe
时间: 2023-07-06 19:04:21 浏览: 103
可以使用`pandas.DataFrame.explode`方法来将某列的list拆分成为新的行,并生成新的DataFrame。
例如,假设我们有如下DataFrame:
```
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [[4, 5], [6], [7, 8, 9]]})
print(df)
```
输出:
```
A B
0 1 [4, 5]
1 2 [6]
2 3 [7, 8, 9]
```
其中列B是一个列表,我们可以使用`explode`方法将其拆分成为新的行:
```
new_df = df.explode('B').reset_index(drop=True)
print(new_df)
```
输出:
```
A B
0 1 4
1 1 5
2 2 6
3 3 7
4 3 8
5 3 9
```
其中`reset_index(drop=True)`可以重置索引,使得新的DataFrame的索引是从0开始的。
相关问题
某个dataframe某列为list拆分成为新的dataframe
可以使用`pandas`库中的`explode`函数将包含列表的列拆分成新的行,然后再将每个元素拆分成新的列。
假设我们有以下数据框`df`,其中`col`列包含了列表:
```
A col B
0 1 [a, b, c] 2
1 3 [d, e] 4
```
我们可以使用以下代码将`col`列拆分成新的行:
``` python
import pandas as pd
df = pd.DataFrame({'A': [1, 3], 'col': [['a', 'b', 'c'], ['d', 'e']], 'B': [2, 4]})
df2 = df.explode('col')
```
这将生成以下数据框`df2`:
```
A col B
0 1 a 2
0 1 b 2
0 1 c 2
1 3 d 4
1 3 e 4
```
接下来,我们可以使用`pandas`库中的`apply`函数和`pd.Series`方法将每个元素拆分成新的列。例如,假设我们想要将列表中的第一个元素作为新的列`col1`,第二个元素作为新的列`col2`,第三个元素作为新的列`col3`,我们可以使用以下代码:
``` python
def split_cols(row):
return pd.Series(row['col'])
df3 = df2.apply(split_cols, axis=1).rename(columns={0: 'col1', 1: 'col2', 2: 'col3'})
df3 = pd.concat([df2[['A', 'B']], df3], axis=1)
```
这将生成以下数据框`df3`:
```
A B col1 col2 col3
0 1 2 a b c
0 1 2 a b c
0 1 2 a b c
1 3 4 d e NaN
1 3 4 d e NaN
```
dataframe某列为list,拆分成为新的dataframe的不同列
可以使用 pandas 的 `DataFrame` 构造函数,将原始的列表列和其他列一起传入构造函数,以创建新的数据框。
例如,假设我们有以下数据框:
```python
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'hobbies': [['reading', 'yoga'], ['swimming', 'cooking'], ['hiking']]
})
```
其中 `hobbies` 是一个列表列,我们想要将其拆分成为不同列。可以使用以下代码:
```python
new_df = pd.DataFrame({
'name': df['name'],
'age': df['age'],
'hobby_1': df['hobbies'].apply(lambda x: x[0] if len(x) > 0 else None),
'hobby_2': df['hobbies'].apply(lambda x: x[1] if len(x) > 1 else None),
'hobby_3': df['hobbies'].apply(lambda x: x[2] if len(x) > 2 else None)
})
```
这个代码块通过使用 `apply` 函数,将每个列表拆分成为最多三个单独的列,并将每个新列添加到新的数据框中。如果列表中不足三个元素,则相应的新列将包含 `None` 值。
新的数据框将如下所示:
```
name age hobby_1 hobby_2 hobby_3
0 Alice 25 reading yoga None
1 Bob 30 swimming cooking None
2 Charlie 35 hiking None None
```
阅读全文