如何将pandas dataframe的字符串类型的一列溢出到int类型的几列中

时间:2019-02-12 17:06:47

标签: python pandas numpy dataframe

我在一列中有pandas dataframe类型,其字符串类型如下:

    commits
0   12, 12, 9, 71, 145, 326, 315
1   54, 23, 265, 160, 164, 142
2   1, 335
3   6, 3, 21, 873
...

数据类型如下:

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 238089 entries, 0 to 238088
Data columns (total 1 columns):
commits    238089 non-null object
dtypes: object(1)
memory usage: 1.8+ MB

我想把它撒进整数类型的单独列中,像这样:

    0    1    2    3     4     5    6  
0   12   12   9    71   145   326   315
1   54   23   265  160  164   142
2   1    335  
3   6    3    21   873
...
  1. 也就是说,每个数字现在都是整数。每行的顺序均不得更改。

  2. 在原始数据集中,每一行都有不同的数字长度。溢出的行是否也可以保持不同的行长?也就是说,空值不占Nan或None。

  3. 如果没有None或Nan不可能溢出,那么最简单的编程方法是什么?

  4. 新数据集可以是numpy或数据框类型。

如何在python中编写代码?谢谢。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

import numpy as np
import pandas as pd

data = ['12, 12, 9, 71, 145, 326, 315',
        '54, 23, 265, 160, 164, 142',
        '1, 335',
        '6, 3, 21, 873']

df = pd.DataFrame(data=data, columns=['commits'])

result = pd.DataFrame([np.array(row) for row in df.commits.str.split(', ')]).fillna('')
print(result)

输出

    0    1    2    3    4    5    6
0  12   12    9   71  145  326  315
1  54   23  265  160  164  142     
2   1  335                         
3   6    3   21  873     

技巧 是将每个列表转换为numpy数组,以便pd.Dataframe修复锯齿状的数组,然后使用fillna替换NaN值与空的空间。

答案 1 :(得分:0)

str.splitexpand=True一起使用:

df.commits.str.split(', ', expand=True).fillna('')

    0    1    2    3    4    5    6
0  12   12    9   71  145  326  315
1  54   23  265  160  164  142
2   1  335
3   6    3   21  873

由于缺少数据,因此不可能所有列都为整数DataType。最接近的是将列为float,将缺失值表示为NaN