将excel中某一列拆分为多个列
昨天有学员学 python文本分析:从入门到精通 这门课时遇到jupyter配置问题,交流快结束的时候聊到excel数据拆分,说如果咱们后续提供excel数据分析的课程,比如excel数据拆分我还会购买大邓你的课。
其实我这门课虽然叫做 python文本分析:从入门到精通 ,但其实毕竟是营销专业出身,要有吸引眼球的营销语言。虽然精通倒不至于,但是让大家同时入门python、爬虫、文本分析、机器学习和数据分析我认为还是可以做到的。我看到这位学员的对话,说明我的课真的帮助到大家解决一些问题,课程质量达到学员预期。
数据
软广就说到此打住,本来学员给我发来了数据,但是数据对于大家可能不熟悉,所以我将学员的数据抽象简化了。
我们先看看数据,再来说问题
import pandas as pd
df = pd.read_excel('data.xls')
df.head()
运行结果
问题
将excel中的某一列拆分成多个列,比如:
将 address 拆分,并新建 province、city
将 birthday 拆分,并新建 year、month、day
思路
之前我们分享过 使用python做更好的数据分析 这篇文章,里面就提到df.agg()方法,可以自定义列的操作函数。
df.agg({'列名a':'操作函数名1'})
自定义操作函数
这两个问题,我们要知道每个列对应的数据是什么类型的。因为这是我自己设计的数据,每个单元格中的数据都是字符串。我先设计address列的操作函数
def address_output_province(text):
return text.split('省')[0]+'省'
address_output_province(text='陕西省西安市')
运行
'陕西省'
def address_output_city(text):
return text.split('省')[-1]
address_output_city(text='陕西省西安市')
运行
'西安市'
接着我们设计下 birthday 的操作函数,输出年份
def birthday_output_year(text):
return text.split('/')[0]
birthday_output_year(text='1995/07/08')
运行
'1995'
def birthday_output_month(text):
return text.split('/')[1]
birthday_output_month(text='1995/07/08')
运行
'07'
def birthday_output_day(text):
return text.split('/')[-1]
birthday_output_day(text='1995/07/08')
运行
'08'
组装
现在我们只需要先新建对应的列newcolumn,然后将拆分的列的值赋值给newcolumn列。
df['province'] = df.agg({'address':address_output_province})
df['city'] = df.agg({'address':address_output_city})
df['year'] = df.agg({'birthday':birthday_output_year})
df['month'] = df.agg({'birthday':birthday_output_month})
df['day'] = df.agg({'birthday':birthday_output_day})
df.head()
运行
通过上面的运行结果,我们知道拆分成功了。现在我们将新的df导出保存。
#将df导出为xls
df.to_excel('newdata.xls')
我们打开项目文件夹,发现文件夹中已经出现了newdata.xls 文件,而且正如我们预期的那样产生了多个新的列。
往期文章
深度好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在微信后台回复 20190305 ,即可获得本项目代码
你看到这里,你懂得