我有一个列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
我如何达到这种格式,是否会有一个替代(稀疏?)系统可能更适合保存我的数据?
答案 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
个值,可能有帮助stack
和reset_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