某列中所有的
数据都是1,加起来不就是总行数吗?引言本文的目的,是向您展示如何使用pandas来执行一些常见的Excel任务。有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其他地方找到的复杂功能同等重要。作为额外的福利,我将会进行一些模糊字符串匹配,以此来展示一些小花样,以及展示pandas是如何利用完整的Python模块系统去做一些在Python中是简单,但在Excel中却很复杂的事情的。有道理吧?让我们开始吧。为某行添加求和项我要介绍的第一项任务是把某几列相加然后添加一个
总和栏。首先我们将excel数据导入到pandas数据框架中。importpandasaspdimportnumpyasnpdf=pd.read_excel("excel-comp-data.xlsx")df.head()我们想要添加一个总和栏来显示Jan、Feb和Mar三个月的销售总额。在Excel和pandas中这都是简单直接的。对于Excel,我在J列中添加了公式sum(G2:I2)。在Excel中看上去是这样的:下面,我们是这样在pandas中 *** 作的:df["total"]=df["Jan"]+df["Feb"]+df["Mar"]df.head()接下来,让我们对各列计算一些汇总信息以及其他值。如下Excel表所示,我们要做这些工作:如你所见,我们在表示月份的列的第17行添加了SUM(G2:G16),来取得每月的总和。进行在pandas中进行列级别的分析很简单。下面是一些例子:df["Jan"].sum(),df["Jan"].mean(),df["Jan"].min(),df["Jan"].max()(1462000,97466.666666666672,10000,162000)现在我们要把每月的总和相加得到它们的和。这里pandas和Excel有点不同。在Excel的单元格里把每个月的总和相加很简单。由于pandas需要维护整个DataFrame的完整性,所以需要一些额外的步骤。首先,建立所有列的总和栏sum_row=df[["Jan","Feb","Mar","total"]].sum()sum_rowJan1462000Feb1507000Mar717000total3686000dtype:int64这很符合直觉,不过如果你希望将总和值显示为表格中的单独一行,你还需要做一些微调。我们需要把数据进行变换,把这一系列数字转换为DataFrame,这样才能更加容易的把它合并进已经存在的数据中。T
函数可以让我们把按行排列的数据变换为按列排列。df_sum=pd.DataFrame(data=sum_row).Tdf_sum在计算总和之前我们要做的最后一件事情是添加丢失的列。我们使用reindex来帮助我们完成。技巧是添加全部的列然后让pandas去添加所有缺失的数据。df_sum=df_sum.reindex(columns=df.columns)df_sum现在我们已经有了一个格式良好的DataFrame,我们可以使用append来把它加入到已有的内容中。df_final=df.append(df_sum,ignore_index=True)df_final.tail()额外的数据变换另外一个例子,让我们尝试给数据集添加状态的缩写。对于Excel,最简单的方式是添加一个新的列,对州名使用vlookup函数并填充缩写栏。我进行了这样的 *** 作,下面是其结果的截图:你可以注意到,在进行了vlookup后,有一些数值并没有被正确的取得。这是因为我们拼错了一些州的名字。在Excel中处理这一问题是一个巨大的挑战(对于大型数据集而言)幸运的是,使用pandas我们可以利用强大的python生态系统。考虑如何解决这类麻烦的数据问题,我考虑进行一些模糊文本匹配来决定正确的值。幸运的是其他人已经做了很多这方面的工作。fuzzywuzzy库包含一些非常有用的函数来解决这类问题。首先要确保你安装了他。我们需要的另外一段代码是州名与其缩写的映射表。而不是亲自去输入它们,谷歌一下你就能找到这段代码code。首先导入合适的fuzzywuzzy函数并且定义我们的州名映射表。fromfuzzywuzzyimportfuzzfromfuzzywuzzyimportprocessstate_to_code={"VERMONT":"VT","GEORGIA":"GA","IOWA":"IA","ArmedForcesPacific":"AP","GUAM":"GU","KANSAS":"KS","FLORIDA":"FL","AMERICANSAMOA":"AS","NORTHCAROLINA":"NC","HAWAII":"HI","NEWYORK":"NY","CALIFORNIA":"CA","ALABAMA":"AL","IDAHO":"ID","FEDERATEDSTATESOFMICRONESIA":"FM","ArmedForcesAmericas":"AA","DELAWARE":"DE","ALASKA":"AK","ILLINOIS":"IL","ArmedForcesAfrica":"AE","SOUTHDAKOTA":"SD","CONNECTICUT":"CT","MONTANA":"MT","MASSACHUSETTS":"MA","PUERTORICO":"PR","ArmedForcesCanada":"AE","NEWHAMPSHIRE":"NH","MARYLAND":"MD","NEWMEXICO":"NM","MISSISSIPPI":"MS","TENNESSEE":"TN","PALAU":"PW","COLORADO":"CO","ArmedForcesMiddleEast":"AE","NEWJERSEY":"NJ","UTAH":"UT","MICHIGAN":"MI","WESTVIRGINIA":"WV","WASHINGTON":"WA","MINNESOTA":"MN","OREGON":"OR","VIRGINIA":"VA","VIRGINISLANDS":"VI","MARSHALLISLANDS":"MH","WYOMING":"WY","OHIO":"OH","SOUTHCAROLINA":"SC","INDIANA":"IN","NEVADA":"NV","LOUISIANA":"LA","NORTHERNMARIANAISLANDS":"MP","NEBRASKA":"NE","ARIZONA":"AZ","WISCONSIN":"WI","NORTHDAKOTA":"ND","ArmedForcesEurope":"AE","PENNSYLVANIA":"PA","OKLAHOMA":"OK","KENTUCKY":"KY","RHODEISLAND":"RI","DISTRICTOFCOLUMBIA":"DC","ARKANSAS":"AR","MISSOURI":"MO","TEXAS":"TX","MAINE":"ME"}这里有些介绍模糊文本匹配函数如何工作的例子。process.extractOne("Minnesotta",choices=state_to_code.keys())('MINNESOTA',95)process.extractOne("AlaBAMMazzz",choices=state_to_code.keys(),score_cutoff=80)现在我知道它是如何工作的了,我们创建自己的函数来接受州名这一列的数据然后把他转换为一个有效的缩写。这里我们使用score_cutoff的值为80。你可以做一些调整,看看哪个值对你的数据来说比较好。你会注意到,返回值要么是一个有效的缩写,要么是一个np.nan所以域中会有一些有效的值。defconvert_state(row):abbrev=process.extractOne(row["state"],choices=state_to_code.keys(),score_cutoff=80)ifabbrev:returnstate_to_code[abbrev[0]]returnnp.nan把这列添加到我们想要填充的单元格,然后用NaN填充它df_final.insert(6,"abbrev",np.nan)df_final.head()我们使用apply来把缩写添加到合适的列中。df_final['abbrev']=df_final.apply(convert_state,axis=1)df_final.tail()我觉的这很酷。我们已经开发出了一个非常简单的流程来智能的清理数据。显然,当你只有15行左右数据的时候这没什么了不起的。但是如果是15000行呢?在Excel中你就必须进行一些人工清理了。分类汇总在本文的最后一节中,让我们按州来做一些分类汇总(subtotal)。在Excel中,我们会用subtotal工具来完成。输出如下:在pandas中创建分类汇总,是使用groupby来完成的。df_sub=df_final[["abbrev","Jan","Feb","Mar","total"]].groupby('abbrev').sum()df_sub然后,我们想要通过对dataframe中所有的值使用applymap来把数据单位格式化为货币。defmoney(x):return"${:,.0f}".format(x)formatted_df=df_sub.applymap(money)formatted_df格式化看上去进行的很顺利,现在我们可以像之前那样获取总和了。sum_row=df_sub[["Jan","Feb","Mar","total"]].sum()sum_rowJan1462000Feb1507000Mar717000total3686000dtype:int64把值变换为列然后进行格式化。df_sub_sum=pd.DataFrame(data=sum_row).Tdf_sub_sum=df_sub_sum.applymap(money)df_sub_sum最后,把总和添加到DataFrame中。final_table=formatted_df.append(df_sub_sum)final_table你可以注意到总和行的索引号是‘0'。我们想要使用rename来重命名它。final_table=final_table.rename(index={0:"Total"})final_table结论到目前为止,大部分人都已经知道使用pandas可以对数据做很多复杂的 *** 作——就如同Excel一样。因为我一直在学习pandas,但我发现我还是会尝试记忆我是如何在Excel中完成这些 *** 作的而不是在pandas中。我意识到把它俩作对比似乎不是很公平——它们是完全不同的工具。但是,我希望能接触到哪些了解Excel并且想要学习一些可以满足分析他们数据需求的其他替代工具的那些人。我希望这些例子可以帮助到其他人,让他们有信心认为他们可以使用pandas来替换他们零碎复杂的Excel,进行数据 *** 作。
一、首先可以按照下面的代码进行输入:
def del_firstline():
for line in fileinput.input("file.txt", inplace = 1):
if not fileinput.isfirstline():
print(fileinput.replace("\n", ""))
二、fileinput
文件输入模块提供用于处理一个或多个文本文件的功能。您可以使用for循环读取一个或多个文本文件的所有行。
三、fileinput常用函数
1、fileinput.input() #返回能够用于for循环遍历的对象
2、fileinput.filename() #返回当前文件的名称
3、fileinput.lineno() #返回当前已经读取的行的数量(或者序号)
4、fileinput.filelineno() #返回当前读取的行的行号
5、fileinput.isfirstline() #检查当前行是否是文件的第一行
6、fileinput.isstdin() #判断最后一行是否从stdin中读取
7、fileinput.close() #关闭队列
扩展资料:
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。
由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
参考资料来源:百度百科-Python
python删除csv里的短横线某一行分2个步骤。根据查询相关公开信息,使用drop函数进行文件中数据的删除行或者删除列 *** 作。
2、可以删除某几行、删除行(某个范围),并将数据重新保存到csv文件中。
评论列表(0条)