首页 > 解决方案 > 如何将 Pandas 数据框的字符串类型的一列溢出到 int 类型的几列中

问题描述

我在一列中有熊猫数据框类型,字符串类型如下:

    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 或 dataframe 类型。

如何在python中编码?谢谢。

标签: pythonpandasnumpydataframe

解决方案


你可以这样做:

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 值替换为空白。


推荐阅读