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

【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用法总结

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

猜你喜欢

转载自blog.csdn.net/qq_45067943/article/details/123272628