【pandas】将单元格中的多个数据拆分为多行数据(explode),以csv文件为源文件进行处理

该篇博客介绍了如何使用Pandas的explode方法将数据框中包含多个值的单元格拆分为多行,并删除空值。具体步骤包括读取CSV文件,遍历特定列,应用explode,以及在删除空值时遇到的问题和解决方案。最终,通过再次读取和保存文件来成功删除空值。
摘要由CSDN通过智能技术生成

【pandas】将单元格中的多个数据拆分为多行数据(explode)

1.原始数据(test.csv)

在这里插入图片描述

2.需求

将“别名”、“科目”这两列中带有多个数据的单元格拆分成多行数据,并将带有空值的行删除,然后另存储为csv文件

3.代码

import pandas as pd
import numpy as np

#导入数据
data = pd.read_csv('test.csv') 
#将单元格中的多个数据拆分为多行数据(用explode方法)
labels = ['别名','科目']
for label in labels:
    df = data[['学号',label]].copy() #记得要加上 copy()方法,不然循环一次后,data 数据里的内容将会改变,第二轮循环会找不到第二个label的索引
    df[label] = df[label].apply(lambda x : x.replace('[','').replace(']','').replace('[]','NaN').split(','))
    df = df.explode(label)
    #df = df.dropna(axis='index',how='any',subset=['学号',label]) 此处不知为何删除不了带有NaN的行我不理解
    #df = df.dropna(axis=0,how='any')
    print(df)
    #df = df[['学号',label]] 这一步可以不要,上一步的 df 中已经含有拆分为多行的信息了
    df.to_csv(label + '.csv', index=False)
    #至此处,已拆分为多行数据 ,但没删除掉带有 空值(NaN)的行,此时print出来的df如下图1示
     
    '''解决删除拆分后(出现缺失的空格),进行文件覆盖'''
	data1 = pd.read_csv(label + '.csv')
	data1 = data1.dropna(axis=0,how='any')
	data1.to_csv(label + '.csv', index=False)

在这里插入图片描述图1

解决空格后:
在这里插入图片描述

4.总结

最后总结一下吧,这也是没办法了,好像只有再次读出csv文件时,此时的df.dropna方法才有效,就这个 df = df.dropna(axis=0,how='any');所以想了个骚气注意,先存好多行数据中带有NaN的文件,然后再读出来,再删除NaN,害,管他呢,能解决问题的方法就是好方法…

5.一些有用的处理csv格式文件数据的方法:

'''一些实用的方法'''
#读取csv文件中指定范围的列数
#list_a = np.arange(4)
#data = pd.read_csv('test.csv',usecols=list_a) 

#data = data.dropna(axis=1,how='all') #删除全为NaN的列 or 若是行: axis=0
#data = data.dropna(axis=1,how='any') #删除含有NaN的列 or 若是行: axis=0
#data = data.drop(['年龄','学号'],axis=1) #删除指定列
#data = data.fillna(0) #将表格中的nan替换为0
#data = data .dropna(axis='index',how='any',subset=['年龄','学号']) #删除 年龄、学号这两列中任何带有 NaN 的行
#data = data .dropna(axis='index',how='any',subset=['年龄','学号']) #删除 年龄、学号这两列中均带有 NaN 的行

当然远不止这些,这里附上参考别人总结方法的链接:
pandas用法总结

对了,这是本文的参考链接:
拆分多行数据

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值