熊猫:扩展一个很长的数字列表

时间:2016-03-12 14:16:28

标签: python python-3.x pandas

我有一个列data的数据集,其中每个条目(行)都是这样的:

11161161166666661661611111111161161111611

然后继续(大约1000个字符长度)。长度是可变的,值存储为对象。这些数字中的每一个都是投票结果,不同的数字表示不同的投票行为。

我希望稍后对此数据运行回归并执行主成分分析。

然而,我有点困惑如何将它变成一个合适的(稀疏?)数据集。

显然,不同的.str函数such as split允许使用expand=True来实现此功能。但是,split('')是不允许的,因此我不知道如何解释每一项。

df.data.apply(lambda x: list(x))
443    [1, 1, 1, 6, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, ...

会给我一长串的数字,但现在我正在努力扩展它。

最后,我认为想要列格式

otherColumn1, otherColumn2, ... data1, data2, data3, data4, ... data31209

我如何达到这种格式,是否会有一个替代(稀疏?)系统可能更适合保存我的数据?

1 个答案:

答案 0 :(得分:1)

我认为您可以使用Series

尝试功能apply
print df
                                        data
0                          11161161166666661
1                                     161111
2  11161161166666661661611111111161161111611
3                  1116116116666666166161111

print df.data.apply(lambda x: pd.Series(list(x)))
  0  1  2  3  4  5    6    7    8    9  ...    31   32   33   34   35   36  \
0  1  1  1  6  1  1    6    1    1    6 ...   NaN  NaN  NaN  NaN  NaN  NaN   
1  1  6  1  1  1  1  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN   
2  1  1  1  6  1  1    6    1    1    6 ...     1    1    6    1    1    1   
3  1  1  1  6  1  1    6    1    1    6 ...   NaN  NaN  NaN  NaN  NaN  NaN   

    37   38   39   40  
0  NaN  NaN  NaN  NaN  
1  NaN  NaN  NaN  NaN  
2    1    6    1    1  
3  NaN  NaN  NaN  NaN  

[4 rows x 41 columns]

有很多NaN个值,可能有帮助stackreset_index

df = df.data.apply(lambda x: pd.Series(list(x))).stack().reset_index()
df.columns = ['a','b','c']
print df.head(20)
    a   b  c
0   0   0  1
1   0   1  1
2   0   2  1
3   0   3  6
4   0   4  1
5   0   5  1
6   0   6  6
7   0   7  1
8   0   8  1
9   0   9  6
10  0  10  6
11  0  11  6
12  0  12  6
13  0  13  6
14  0  14  6
15  0  15  6
16  0  16  1
17  1   0  1
18  1   1  6
19  1   2  1