【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用法总结
对了,这是本文的参考链接:
拆分多行数据