-
python drop函数_Python几行代码轻松拆分表格
2020-11-27 16:42:56Python几行代码轻松拆分表格作者:梅朵微信公众号:实用办公编程技能微信号:Excel-Python什么?,Python几行代码竟然可以按指定轻松拆分表格?将test.xls中的数据按地区拆分成不同的表格,如:广州.xls…深圳.xls…...Python几行代码轻松拆分表格
作者:梅朵
微信公众号:实用办公编程技能
微信号:Excel-Python
什么?,Python几行代码竟然可以按指定轻松拆分表格?
将test.xls中的数据按地区拆分成不同的表格,如:
广州.xls…深圳.xls…西安
那么如何用Python来实现呢?
总共7行代码,是不是蠢蠢欲动,你也想试试!
将test.xls中的数据按地区拆分成不同的表格,主要有4步:
第一步:导入所需要的库:pandas
pandas是数据分析处理库,可以读写Excel表格的。
import pandas as pd
第二步:读取Excel表格
使用pandas的read_excel函数进行读取。
file=pd.read_excel(r'C:UsersAdministratorDesktopfiletest.xls',sheet_name="销售总表")
第三步:获取地区目录
使用pandas的iloc获取地区列,使用drop_duplicates函数获取不重复地区目录。
menu=file.iloc[:,0].drop_duplicates()
第四步:按地区目录将Excel表格进行拆分
主要是使用for循环进行拆分。for name in menu: df1=file[file.地区==name]
path="C:UsersAdministratorDesktopfile"+name+".xls"
df1.to_excel(path,index=None)
小伙伴们,是不是很简单!
以上就是用Python几行代码实现表格按条件拆分的方法,下面给出具体的代码,供大家交流!
关注我们的公众号“实用办公编程技能”(微信号:Excel-Python),让我们的工作和生活变更更轻松!
http://weixin.qq.com/r/EC7YwPbEh6v4rbKj93sC (二维码自动识别)
往期文章:
1.Python制作一个简易计算器2.Python制作二维码生成器3.用Python控制摄像头录制视频4.用Python玩转视频播放5.用Python制作照片阅读器6.用Python实现文本自动播读7.Python制作一个简易时钟8.Python代码实现手写数字识别9.用Python轻松进行图像文本识别10.用Python做小说词频分析图
扫描关注更多精彩,欢迎留言!
-
python drop函数_Python高阶技巧,你 GET了吗?
2020-11-29 18:53:44(点击上方快速关注并设置为星标,一起学Python)选自towardsdatascience 作者:George Seif, 机器之心编译Python 是一种美丽...Lambda 函数Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。Pyth...(点击上方快速关注并设置为星标,一起学Python)
选自towardsdatascience 作者:George Seif, 机器之心编译
Python 是一种美丽的语言,它简单易用却非常强大。但你真的会用 Python 的所有功能吗?
下面是 Python 的 5 种高级特征,以及它们的用法。
Lambda 函数
Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。
Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。
lambda 函数可以使用任意数量的参数,但表达式只能有一个。
x = lambda a, b : a * b
print(x(5, 6)) # prints '30'
x = lambda a : a*3 + 3
print(x(3)) # prints '12'看它多么简单!我们执行了一些简单的数学运算,而无需定义整个函数。这是 Python 的众多特征之一,这些特征使它成为一种干净、简单的编程语言。
Map 函数
Map() 是一种内置的 Python 函数,它可以将函数应用于各种数据结构中的元素,如列表或字典。对于这种运算来说,这是一种非常干净而且可读的执行方式。
def square_it_func(a):
return a * a
x = map(square_it_func, [1, 4, 7])
print(x) # prints '[1, 16, 47]'
def multiplier_func(a, b):
return a * b
x = map(multiplier_func, [1, 4, 7], [2, 5, 8])
print(x) # prints '[2, 20, 56]'看看上面的示例!我们可以将函数应用于单个或多个列表。实际上,你可以使用任何 Python 函数作为 map 函数的输入,只要它与你正在操作的序列元素是兼容的。Filter 函数
filter 内置函数与 map 函数非常相似,它也将函数应用于序列结构(列表、元组、字典)。二者的关键区别在于 filter() 将只返回应用函数返回 True 的元素。
详情请看如下示例:
# Our numbers
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
# Function that filters out all numbers which are odd
def filter_odd_numbers(num):
if num % 2 == 0:
return True
else:
return False
filtered_numbers = filter(filter_odd_numbers, numbers)
print(filtered_numbers)
# filtered_numbers = [2, 4, 6, 8, 10, 12, 14]我们不仅评估了每个列表元素的 True 或 False,filter() 函数还确保只返回匹配为 True 的元素。非常便于处理检查表达式和构建返回列表这两步。
Itertools 模块
Python 的 Itertools 模块是处理迭代器的工具集合。迭代器是一种可以在 for 循环语句(包括列表、元组和字典)中使用的数据类型。
使用 Itertools 模块中的函数让你可以执行很多迭代器操作,这些操作通常需要多行函数和复杂的列表理解。关于 Itertools 的神奇之处,请看以下示例:
from itertools import *
# Easy joining of two lists into a list of tuples
for i in izip([1, 2, 3], ['a', 'b', 'c']):
print i
# ('a', 1)
# ('b', 2)
# ('c', 3)
# The count() function returns an interator that
# produces consecutive integers, forever. This
# one is great for adding indices next to your list
# elements for readability and convenience
for i in izip(count(1), ['Bob', 'Emily', 'Joe']):
print i
# (1, 'Bob')
# (2, 'Emily')
# (3, 'Joe')
# The dropwhile() function returns an iterator that returns
# all the elements of the input which come after a certain
# condition becomes false for the first time.
def check_for_drop(x):
print 'Checking: ', x
return (x > 5)
for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]):
print 'Result: ', i
# Checking: 2
# Checking: 4
# Result: 6
# Result: 8
# Result: 10
# Result: 12
# The groupby() function is great for retrieving bunches
# of iterator elements which are the same or have similar
# properties
a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5])
for key, value in groupby(a):
print(key, value), end=' ')
# (1, [1, 1, 1])
# (2, [2, 2, 2])
# (3, [3, 3])
# (4, [4])
# (5, [5])Generator 函数
Generator 函数是一个类似迭代器的函数,即它也可以用在 for 循环语句中。这大大简化了你的代码,而且相比简单的 for 循环,它节省了很多内存。
比如,我们想把 1 到 1000 的所有数字相加,以下代码块的第一部分向你展示了如何使用 for 循环来进行这一计算。
如果列表很小,比如 1000 行,计算所需的内存还行。但如果列表巨长,比如十亿浮点数,这样做就会出现问题了。使用这种 for 循环,内存中将出现大量列表,但不是每个人都有无限的 RAM 来存储这么多东西的。Python 中的 range() 函数也是这么干的,它在内存中构建列表。
代码中第二部分展示了使用 Python generator 函数对数字列表求和。generator 函数创建元素,并只在必要时将其存储在内存中,即一次一个。这意味着,如果你要创建十亿浮点数,你只能一次一个地把它们存储在内存中!Python 2.x 中的 xrange() 函数就是使用 generator 来构建列表。
上述例子说明:如果你想为一个很大的范围生成列表,那么就需要使用 generator 函数。如果你的内存有限,比如使用移动设备或边缘计算,使用这一方法尤其重要。
也就是说,如果你想对列表进行多次迭代,并且它足够小,可以放进内存,那最好使用 for 循环或 Python 2.x 中的 range 函数。因为 generator 函数和 xrange 函数将会在你每次访问它们时生成新的列表值,而 Python 2.x range 函数是静态的列表,而且整数已经置于内存中,以便快速访问。
# (1) Using a for loopv
numbers = list()
for i in range(1000):
numbers.append(i+1)
total = sum(numbers)
# (2) Using a generator
def generate_numbers(n):
num, numbers = 1, []
while num numbers.append(num)
num += 1
return numbers
total = sum(generate_numbers(1000))
# (3) range() vs xrange()
total = sum(range(1000 + 1))
total = sum(xrange(1000 + 1))原文链接:https://towardsdatascience.com/5-advanced-features-of-python-and-how-to-use-them-73bffa373c84
(完)看完本文有收获?请转发分享给更多人关注「Python那些事」,做全栈开发工程师点「在看」的人都变好看了哦
-
python drop函数_为何将Jupyter Notebook转换为python脚本
2020-12-03 16:12:15全文共3360字,预计学习时长9分钟图源:unsplash大多数数据科学在线课程都把Jupyter Notebook作为教学媒介,这是因为初学者在Jupyter Notebook的单元格中编写代码,比编写包含类和函数的脚本更容易。另一个原因在于...全文共3360字,预计学习时长9分钟
图源:unsplash
大多数数据科学在线课程都把Jupyter Notebook作为教学媒介,这是因为初学者在Jupyter Notebook的单元格中编写代码,比编写包含类和函数的脚本更容易。
另一个原因在于它使浏览和绘制数据变得容易。键入"Shift + Enter"时,你可以立即看到代码的结果,这使我们能够轻松地确定代码是否有效。
然而,当处理更多数据科学项目时,Jupyter Notebook也存在几个缺点:
· 缺乏条理性:随着代码变大,我们所编写的东西越来越难以跟踪。无论使用多少标记将Notebook分隔成不同的部分,断开连接的单元格都使用户难以专注于代码功能。
· 难以试验:你需要使用不同的数据处理方法进行测试,为机器学习算法选择不同的参数,查看准确性是否提高。但每次试验新方法时,都需要查找和重新运行相关单元格,这耗神耗时,尤其是处理或培训过程需要很长时间才能运行时。
· 可重复性低:如果你想要使用结构略有不同的新数据,识别其中的错误源很难。
· 难以调试:当你在代码中收到错误时,无法准确判断出错的原因,是代码还是数据更改?如果是代码出错,具体是哪个部分?
· 不适合生产:Jupyter Notebook与其他工具配合使用效果不佳。使用其他工具时,从Jupyter Notebook运行代码并不容易。
图源:unsplash
一定有更好的方法来处理代码,所以我决定尝试一下脚本。为了减少混淆,引用.py文件时,在本文中使用单词"脚本"。
组织
Jupyter Notebook中的单元格很难将代码组织成不同的部分。使用脚本可以创建几个小函数,每个函数指定代码的功能。
更妙的是,如果这些函数可以分类在同类别,如处理数据的函数时,可以将它们放在同一个类中。
每当我们想要处理数据时,就可以利用类预处理中的函数。
鼓励实验
当我们想要尝试对预处理数据的不同方法时,只需添加或删除函数,这样注释不用害怕破坏代码。即使碰巧破坏了代码,也能确切地知道在哪里修复。
提高重复性
使用类和函数,可以使代码足够通用,以便能够和其他数据一起使用。例如,如果我们想在新数据中删除不同的列,只需将columns_to_drop更改为列的列表,若是删除,代码也将顺利运行。
columns_to_drop =config.columns.to_drop datetime_column =config.columns.datetime.sentiment dropna_columns =config.columns.drop_na processor =Preprocess(columns_to_drop,datetime_column, dropna_columns)
还可以创建一个管道来指定处理和训练数据的步骤。一旦拥有管道,我们所需要做的就是使用它对列车和测试数据应用相同的处理。
pipline.fit_transform(data)
易于调试
使用函数可以更容易地测试该函数是否产生期望的输出,我们可以快速地指出代码中的哪些地方需要更改以生成想要的输出。
defextract_date_hour_minute(string: str): '''Extract datahour and minute from datetime string''' try: return string[:16] exceptTypeError: return np.nan deftest_extract_date_hour_minute(): '''Test whether the function extractdate, hour, and minute ''' string ='2020-07-30T23:25:31.036+03:00' assertextract_date_hour_minute(string) =='2020-07-30T23:25'
如果所有测试都通过了,但是在运行代码时仍然存在错误,那么我们就知道接下来应该查看这些数据。例如,在通过上面的测试后,在运行脚本时仍然有一个类型错误,这使数据中有空值。那就只需要处理这个问题,就可以平稳运行代码。
适于生产
在多个脚本中使用不同的函数:
from preprocess import preprocess from model import run_model from predict import predict defmain(config): df =preprocess(config) df =run_model(config) df, df_scale, min_day, max_day, accuracy =predict(df, config)
或者添加配置文件来控制变量的值。这可以让我们不必浪费时间去跟踪代码中的特定变量来更改其值。
columns: to_drop: #- keywords #- entities - code - error - warnings binary_columns: - sentiment - Diff datetime: time: Date sentiment: crawled drop_na: - sentiment - usage - crawled - emotion to_predict: sentiment
你还可以轻松地添加工具来跟踪实验,比如MLFlow,或者添加工具来处理配置,比如Hydra.cc。
图源:unsplash
不喜欢Jupyter Notebook,直到迫使自己做出调整
我以前一直使用Jupyter Notebook。当一些数据科学家建议将Notebook笔记本换成脚本从而避免上述一些问题时,我不理解也不愿意这么做,因为我不喜欢运行单元格时无法看到这种不确定性。
但是,当我在新公司开始第一个真正的数据科学项目时,Jupyter Notebook的缺点越来越大,所以我决定踏出舒适区,用脚本进行实验。
起初,我很不习惯,但也注意到了使用脚本的好处。当代码被组织成不同的函数、类和等多个脚本(每个脚本都用于不同的目的,如预处理、培训和测试)时,我开始感到工作更有条理性。
我在建议读者不要用Jupyter Notebook?
并不是。如果代码比较小,且不打算将代码投入生产,仍然可以使用Jupyter Notebook。当想要分析、可视化数据时,也可以使用Jupyter Notebook。还可以用它来解释如何使用一些python库。例如,Khuyen Tran主要使用这个存储库中的Jupyter Notebook作为媒介来解释他所有文章中提到的代码。
如果你不习惯在脚本中编写所有内容,那么你可以将脚本和Jupyter Notebook用于不同的目的。例如,可以在脚本中创建类和函数,然后将它们导入到Notebook中,这样就不那么凌乱了。
另一种方法是在写完笔记本后把它变成脚本,但组织笔记本中的代码(比如把它们放到函数和类中以及编写测试函数)通常要花费更长的时间。你可以先写一个小的函数,再写一个小的测试函数,可以更快更安全。如果正好想用新的Python库加速代码,可以使用已经编写的测试函数来确保它如期望中那样工作。
图源:unsplash
除了本文中提到的方法,一定有更多的方法可以解决Jupyter Notebook的缺点。
每个人都有自己提高工作利率的方法。刚从Jupyter Notebook切换到脚本可能不太习惯,因为用脚本编写代码不太直观,但你最终会习惯的。你会开始意识到脚本在凌乱的Jupyter Notebook上有着许多好处,并且会希望用脚本编写大部分代码。
不积跬步无以至千里,从细微处开始改变自己吧。
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范
-
python drop函数_用python帮财务小姐姐自动生成财务报表
2020-11-29 10:57:56↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选来源:python数据分析之禅作者:小dull鸟Oneoldwatch,likebrief python大家好,我是老表~今天和大家分享的内容是关于Python...↑↑↑关注后"星标"简说Python
人人都可以简单入门Python、爬虫、数据分析 简说Python严选来源:python数据分析之禅 作者:小dull鸟
One old watch, like brief python大家好,我是老表~今天和大家分享的内容是关于Python自动化操作excel一些方法和技巧,学习了记得点赞、留言、转发,三连哦~公司财务小姐姐每月需要根据如下报表统计出本月、上月、去年同期的销售额、客流量、客单价数据:
每个月都要手动计算,非常耗费时间,本着乐于助人的原则,我用python写了个小程序,能够实现自动生成财务报表,现把具体过程分享给大家:
一、pandas导入数据源
import pandas as pd
data=pd.read_csv('数据模板.csv',encoding='gbk',parse_dates=["成交时间"])
dataparse_dates可以将成交时间列转换成时间格式
二、pandas计算相关指标
先给大家介绍一下指标的计算方式:
销售额=单价*销量客流量=订单id去重后的次数客单价=销售额/客流量
1.计算上月数据
通过pandas比较功能,取出本月数据,&为比较运算符,相当于“与”
from datetime import datetime
current_m=data[(data["成交时间"]>=datetime(2020,2,1))&(data["成交时间"]<=datetime(2020,2,28))]
current_m销售额计算
current_s=(current_m['销量']*current_m['单价']).sum()
current_ssum是pandas中的求和函数,用于返回用户所请求轴的值之和。
客流量计算
current_t=current_m['订单ID'].drop_duplicates().count()
current_tdrop_duplicatesop:去重函数count:计数函数
客单价计算
curent_s_t=round(current_s/current_t,2)
curent_s_t2.计算上月数据
计算方式是一样的,只不过把日期范围调整一下,代码如下:
from datetime import datetime
last_m=data[(data["成交时间"]>=datetime(2020,1,1))&(data["成交时间"]<=datetime(2020,1,31))]
last_s=(last_m['销量']*last_m['单价']).sum()
last_t=last_m['订单ID'].drop_duplicates().count()
last_s_t=round(last_s/last_t,2)3.计算去年同期数据
from datetime import datetime
same_m=data[(data["成交时间"]>=datetime(2019,2,1))&(data["成交时间"]<=datetime(2019,2,28))]
same_s=(same_m['销量']*same_m['单价']).sum()
same_t=same_m['订单ID'].drop_duplicates().count()
same_s_t=round(same_s/same_t,2)4.将上述数据转成DataFrame表格型数据结构
result=pd.DataFrame([[current_s,last_s,same_s],[current_t,last_t,same_t],[curent_s_t,last_s_t,same_s_t]],columns=["本月","上月同期","去年同期"],index=["销售额","客流量","客单价"])
result5.增加同比和环比数据
result["同比"]=result["本月"]/result["上月同期"]-1
result["环比"]=result["本月"]/result["去年同期"]-1
result自动化报表的模板基本已经做好了,等下月需要时,只需改一下时间,运行程序即可,省去了大量的人工计算时间
三、可视化展示
用plotly画出柱状图
import plotly.graph_objs as go
columns=["本月","上月同期","去年同期"]
fig = go.Figure(data=[
go.Bar(name='销售额',x=columns,y=[current_s,last_s,same_s]),
go.Bar(name='客流量',x=columns,y=[current_t,last_t,same_t]),
go.Bar(name='客单价',x=columns,y=[curent_s_t,last_s_t,same_s_t]),])
fig.update_layout(barmode='group')
fig.show()点击右上角标签,可以展示不同的参数图形
简说Python
长按扫码关注,一起学Python
-
python drop函数_Python数据分析入门教程(四):数值操作
2020-12-03 16:56:45(2)Python实现 在Python中,要删除某列,用到的是drop()方法,即在drop方法后的括号中指明要删除的列名或者列的位置,即第几列。 在drop方法后的括号中直接传入待删除列的列名,需要加一个参数axis,并让其参数值... -
python中drop函数无效的原因
2020-05-21 17:05:22python中drop函数无效的原因 写代码的时候想使用drop函数,但怎么更改都不起作用,本来以为是python版本的原因,仔细看了drop函数用法之后发现 drop系列的所有函数都不改变原有的df中的数据! 也就是说一定不能像... -
python删除drop_python中用drop函数删除某列或者某行的操作教程
2020-12-15 03:10:27python中用drop函数删除某列或者某行的操作教程import pandas as pdimport numpy as npfrom pandas import dataframefrom pandas import seriesdf1= dataframe({"handsome":["timo","anni","timo"],"smart":["mike",... -
Python中pandas dataframe删除一行或一列:drop函数
2018-02-10 20:10:25用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=0,指删除index,因此删除columns时要指定axis=1; inplace=False,默认该删除操作不改变原数据,而是返回... -
python进行数据处理——pandas的drop函数
2017-10-21 16:39:12使用drop函数删除表中的某一行或者某一列,《利用python进行数据分析》 -
python duplicated函数_16、pandas的duplicated和drop_duplicaates函数
2021-02-09 02:21:18数据源要查询是否存在重复值可以使用duplicated()函数:查询面积是否有相同(重复)值返回的是一组bool值,这些bool值能够用于筛选非重复值或者重复值。需要注意的是duplicated()如果不指定面积这个变量的话,那么其将... -
Python中pandas dataframe删除一行或一列:drop函数详解
2020-09-20 07:20:54今天小编就为大家分享一篇Python中pandas dataframe删除一行或一列:drop函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python进行数据处理之Pandas的drop函数
2019-03-17 23:00:52本文出处主要来源于必备工具书《利用python进行数据分析》。 1.清理无效数据 df[df.isnull()] #返回的是个true或false的Series对象(掩码对象),进而筛选出我们需要的特定数据。 df[df.notnull()] df.drop... -
python 去重函数--drop_dumlicate()
2019-07-18 11:51:32drop_duplicate(subset,keep,inplace) #去重函数 subset:子列名 keep:保留第一列或最后一列,first/last inplace:是否在本数据集修改 示例: df.drop(subset=['item_id','buyer_admin_id'],keep='first') #item_... -
python的drop_duplicates函数_python-drop_duplicates在熊猫中不起作用?
2020-12-11 11:11:17但是,在连接所有数据并使用drop_duplicates函数之后,该代码将被控制台接受.但是,当打印到新的excel文件时,副本仍会在一天之内保留.我想念什么吗?是否使drop_duplicates函数无效?我的代码如下:import datetime... -
astype函数_Python进行数据处理之Pandas的drop函数
2020-11-27 06:00:36删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。本文出处主要来源于必备工具书《利用python进行数据分析》。1.清理无效数据df[df.is... -
python drop用法_python进行数据清理之pandas中的drop用法
2021-01-13 18:37:58从基本的数据清理学起吧讲一下drop函数的用法删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是可选择性的返回另一个dataframe来存放删除后的数据。删除无效项df[... -
python pandas 之drop()函数
2019-05-10 10:17:43drop函数的使用 (1)drop() 删除行和列 drop([ ],axis=0,inplace=True) drop([]),默认情况下删除某一行; 如果要删除某列,需要axis=1; 参数inplace 默认情况下为False,表示保持原来的数据不变,True 则... -
python dataframe删除某一列_Python进行数据处理之Pandas的drop函数
2021-01-06 21:23:38删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。本文出处主要来源于必备工具书《利用python进行数据分析》。1.清理无效数据df[df.is... -
python中如何删除某列或者某行--用drop函数
2018-07-24 09:33:28在drop函数后面用shift+tab可以查看函数的参数明细,如下: 默认参数axis=0,表示对行进行操作,如需对列进行操作需要更改默认参数为axis=1, 默认参数inplace=False,表示该删除操作不改变原数据,而是返回一...