将pandas分成所有单个字符并将其转换为dataframe

时间:2017-09-25 08:45:55

标签: python pandas dataframe

我已将txt文件导入熊猫数据框,结果如下所示:

Add

我想将该条目拆分为所有单独的数字,并转换为数据框,其中每一行都是上述条目的单个元素:

数据框应如下所示:

0   0101110011110110111001010100001111100010010010...
    Name: 0, dtype: object

注意:0 0 \\ 1 1 \\ 2 0 \\ 3 1 \\ 4 1 \\ 5 1 \\ 6 0 \\ 7 0 \\ .... 是行索引。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

使用pandas可以按以下步骤操作:

pd.DataFrame(df[0].apply(list)[0]) 

这是做什么的:

  • 将字符串010111 .... 0010转换为字符列表[0,1,0..0,1,0]
  • 使用结果列表创建具有您要查找的格式的新数据框。

可重复的例子:

In [26]: df = pd.DataFrame(['0101110011110110111001010100001111100010010010'])

In [27]: df
Out[27]: 
                                                0
0  0101110011110110111001010100001111100010010010

In [28]: pd.DataFrame(df[0].apply(list)[0]).head(10)
Out[28]: 
   0
0  0
1  1
2  0
3  1
4  1
5  1
6  0
7  0
8  1
9  1

In [29]: 

答案 1 :(得分:1)

您可以尝试直接正确导入文件,而不是先创建格式错误的数据框。由于pandas建立在numpy之上,你也可以使用:

>>> import numpy as np
>>> np.array(list('0101110011110110111001010100001111100010010010'))
array(['0', '1', '0', '1', '1', '1', '0', '0', '1', '1', '1', '1', '0',
       '1', '1', '0', '1', '1', '1', '0', '0', '1', '0', '1', '0', '1',
       '0', '0', '0', '0', '1', '1', '1', '1', '1', '0', '0', '0', '1',
       '0', '0', '1', '0', '0', '1', '0'], 
      dtype='<U1')

如果所有字符都是'0''1',则可以定义一个布尔数组:

>>> a = np.array(list('0101110011110110111001010100001111100010010010'))
>>> a == '1'
array([False,  True, False,  True,  True,  True, False, False,  True,
        True,  True,  True, False,  True,  True, False,  True,  True,
        True, False, False,  True, False,  True, False,  True, False,
       False, False, False,  True,  True,  True,  True,  True, False,
       False, False,  True, False, False,  True, False, False,  True, False], dtype=bool)

然后,您可以根据此数组定义DataFrame

>>> pd.DataFrame(a == '1')
        0
0   False
1    True
2   False
3    True
4    True
5    True
6   False
7   False
8    True
9    True
10   True
11   True
12  False
...

您没有丢失任何信息,但生成的对象应占用更少的空间并加快处理速度。

答案 2 :(得分:0)

您可以使用list拆分

pd.DataFrame(list(df[0].item()))

,或者

pd.DataFrame(list(df[0].iloc[0]))

实施例

In [3526]: pd.DataFrame(list(df[0].item())).head(10)
Out[3526]:
   0
0  0
1  1
2  0
3  1
4  1
5  1
6  0
7  0
8  1
9  1

详细

In [3527]: df
Out[3527]:
                                                0
0  0101110011110110111001010100001111100010010010