如何从包含pandas中不同元素的列表创建数据框?

时间:2017-10-21 22:40:23

标签: python python-3.x pandas numpy dataframe

我有像这样的pandas专栏

train['finally'].head(5)


0    [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ...
1    [0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, ...
2    [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, ...
3    [2, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, ...
4    [0, 0, 0, 0, 7, 0, 0, (3, 1), 0, 0, 0, 0, 0, 0...

我想使用它来使用此列创建单独的pandas数据框

我尝试使用此

visits_df = train['finally'].apply(lambda x: pd.Series(str(x).split(',')))

和这个

df = pd.DataFrame(train.visits.str.split(' ').tolist())

我尝试拆分逗号和空格,但结果相同

但问题是列中有一些元素是这样的元组(3, 1)

我尝试分割逗号和空格,但结果相同。

0   [0  0   0   0   3   0   0   0   0   0   ... 0   2   3   0   0   0   0   0   0]  NaN
1   [0  0   0   4   0   0   0   5   0   0   ... 6   0   0   4   0   0   (2  4)  0   0]
2   [0  0   0   0   0   0   0   3   0   0   ... 5)  0   3   0   0   0   0]  NaN NaN NaN
3   [2  0   7   2   0   0   0   0   0   0   ... 0   0   5   0   0   6   0   0]  NaN NaN
4   [0  0   0   0   7   0   0   (3  1)  0   ... 0   0   0   0   0   0   0   0   0   0]

它将元组分成不同的列,我看到额外的列,应该只有143列

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

致电apply + pd.Series。无需转换为str

df
              finally
0    [9, 5, 16, 4, 1]
1  [7, 2, 16, 30, 13]
2    [7, 5, 3, 2, 16]
3  [5, 15, 11, 23, 5]
4     [3, 1, 1, 4, 6]
5   [3, 14, 4, 0, 14]
6   [5, 1, 10, 21, 5]
7  [9, 17, 11, 10, 8]
8   [6, 11, 20, 6, 6]
9    [21, 4, 3, 4, 9]

df['finally'].apply(lambda x: pd.Series(x))

    0   1   2   3   4
0   9   5  16   4   1
1   7   2  16  30  13
2   7   5   3   2  16
3   5  15  11  23   5
4   3   1   1   4   6
5   3  14   4   0  14
6   5   1  10  21   5
7   9  17  11  10   8
8   6  11  20   6   6
9  21   4   3   4   9

请注意,转换为字符串并在逗号上拆分,您也有可能将元组中的数据拆分,我猜您不希望这样。

请注意,如果字符串的列开头,那么首先使用{{1}将它们解析为python对象是个好主意。 }。

ast

然后按照上面列出的流程进行操作。

相关问题