python - 如何将 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
...
也就是说,现在每个数字都是一个整数。每行的顺序不能改变。
在原始数据集中,每一行都有不同长度的数字。是否有可能溢出的也可以保持不同的行长?也就是说,没有 Nan 或 None 值占据空位。
如果没有 None 或 Nan 就不可能溢出,那么最简单的编程方法是什么?
新数据集可以是 numpy 或 dataframe 类型。
如何在python中编码?谢谢。
解决方案
你可以这样做:
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 值替换为空白。
推荐阅读
- node.js - API 调用 Node 后端后访问 header 属性
- java - 使用opencv抛出异常将字符串转换为pojo类
- c++ - S3/Minio 性能问题
- postgresql - #heroku 错误:列 c.relhasoids 不存在第 1 行:...rigers,c.relrowsecurity,c.relforcerowsecurity,c.relhasoi
- java - JAVA - 存储实现接口然后返回实例的类
- laravel - 下载 Laravel 安装程序时连接被拒绝 - “https://repo.packagist.org/packages.json”文件无法下载”
- c# - 将一个实体复制到另一个实体以进行缓存
- python - 列表理解“创建列表”和“附加元素”与简单循环有何不同?
- arrays - 仅修改前 n 个元素并在 ruby 中返回修改后的数组
- java - 录音机第一次工作,然后只记录3秒