Exce表格网

pandas在excel表追加数据(pandas追加写入.xlsx)

来源:www.0djx.com  时间:2022-12-24 06:30   点击:156  编辑:表格网  手机版

1. pandas追加写入.xlsx

推荐以下几个哦!

1 xlrd 库:从 excel 文件读取数据和格式化信息的库,支持 .xls 以及 .xlsx 文件。

2 xlwings 库:支持 python 调用 excel ,也支持 excel VBA 调用 python 脚本,同样支持文件的读写操作,是比较强大的一款 python 库。

3 win32com 库:支持 .xls,.xlsx 文件的读,支持 .xlsx 文件的写。

4 pandas库:比较常见的一种 python 分析数据的库,支持 .xls,.xlsx 文件的读写,可以只加载每个表的单一工作页。

5 xlsxwriter 库:不同的是这个库只支持 .xlsx 的写操作,可以支持 excel VBA 调用 python 脚本。

2. pandas追加写入行 xlsx

该系统在spyder软件中利用pandas读取excel文件失败表现为系统闪退,原因和解决方法如下3、软件bug:软件有bug,此问题只能默哀了,只能期待软件开发商早点修复了。4、硬件故障:维修或更换;5、内存不足:内存空间

3. pandas追加写入csv

不是的,除非设置了读取数据的格式,一般不会只保留整数。

4. pandas追加写入csv文件

引入pandas使用pandas下的read_csv方法,读取csv文件,参数是文件的路径,这是一个相对路径,是相对于当前工作目录的,那么如何知道当前的工作目录呢?

使用os.getcwd()方法获取当前工作目录读取前三后数据,查看一下是否读取正确,显然都是乱码,这是什么问题呢?

我们需要设定参数encoding,也就是编码方式,如果你不设定编码方式,默认是utf8,现在csv文件是gbk编码的,所以需要使用encoding='gbk'我用的编辑器是eric4,注意,eric4默认是不支持中文的,如果你想要显示中文,前提是设置正确的编码,在preferences中设置成utf8即可回到pandas,我们可以有更多选项来设置打开数据时的操作:

5. pandas按列追加写入表格

本文所演示的的可视化方法

散点图 (Scatterplot)

直方图 (Histogram)

小提琴图 (Violinplot)

特征两两对比图(Pairplot)

安德鲁斯曲线 (Andrews curves)

核密度图 (Kernel density estimation plot)

平行坐标图 (Parallel coordinates)

Radviz (力矩图?)

热力图 (Heatmap)

气泡图 (Bubbleplot)

这里主要使用Python一个流行的作图工具: Seaborn library,同时Pandas和bubbly辅助。为什么Seaborn比较好?

因为很多时候数据分析,建模前,都要清洗数据,清洗后数据的结果总要有个格式,我知道的最容易使用,最方便输入模型, 最好画图的格式叫做"Tidy Data" (Wickham H. Tidy data[J]. Journal of Statistical Software, 2014, 59(10): 1-23.) 其实很简单,Tidy Data格式就是:

每条观察(记录)自己占一行

观察(记录)的每个特征自己占一列

举个例子,我们即将作图的数据集IRIS就是Tidy Data(IRIS(IRIS数据集)_百度百科):

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

该数据集包含了5个属性:

Sepal.Length(花萼长度),单位是cm;

Sepal.Width(花萼宽度),单位是cm;

Petal.Length(花瓣长度),单位是cm;

Petal.Width(花瓣宽度),单位是cm;

种类:Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),以及Iris Virginica(维吉尼亚鸢尾)。

IRIS数据

可以看到,每条观察(ID=0,1,2...)自己占一行,每个特征(四个部位长/宽度,种类)自己占一列。Seaborn就是为Tidy Data设计的,所以方便使用。

所以这个数据集有6列,6个特征,很多时候做可视化就是为了更好的了解数据,比如这里就是想看每个种类的花有什么特点,怎么样根据其他特征把花分为三类。我个人的喜好是首先一张图尽量多的包含数据点,展示数据信息,从中发现规律。我们可以利用以下代码完全展示全部维度和数据这里用的bubbly:

三维图,全局观察

Python做出来,其实是一张可以拖动角度,放大缩小的图,拖一拖看各角度视图会发现三类还是分的挺明显的。Github上这个bubbly还是很厉害的,方便。

接下来开始做一些基础的可视化,没有用任何修饰,代码只有最关键的画图部分,可视化作为比赛的一个基础和开端,个人理解做出的图能看就行,美不美无所谓,不美也不扣分。因为

散点图,可以得到相关性等信息,比如基本上SepalLengthCm越大,SepalWidthCm越大

散点图

使用Jointplot, 看两个变量的分布,KDE图,同时展示对应的数据点

就像上一篇说的,比赛中的每个环节都至关重要,很有必要看下这些分布直方图,kde图,根据这些来处理异常值等,这里请教,为什么画了直方图还要画KDE??我理解说的都是差不多的东西。

关于KDE:"由于核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。"

无论如何,我们先画直方图,再画KDE

直方图KDE 图

这里通过KDE可以说,由于Setosa的KDE与其他两种没有交集,直接可以用Petailength线性区分Setosa与其他两个物种。

Pairplot

箱线图,显示一组数据分散情况的统计图。形状如箱子。主要用于反映原始数据分布的特征,关键的5个黑线是最大值、最小值、中位数和两个四分位数。在判断异常值,处理异常值时候有用。

BoxPlot

小提琴图

Violinplot

这个Andrews curves很有趣,它是把所有特征组合起来,计算个值,展示该值,可以用来确认这三个物种到底好不好区分,维基百科的说法是“If there is structure in the data, it may be visible in the Andrews' curves of the data.”(Andrews plot - Wikipedia)

Andrews' curvesradviz

Radviz可视化原理是将一系列多维空间的点通过非线性方法映射到二维空间的可视化技术,是基于圆形平行坐标系的设计思想而提出的多维可视化方法。圆形的m条半径表示m维空间,使用坐标系中的一点代表多为信息对象,其实现原理参照物理学中物体受力平衡定理。 多维空间的点映射到二维可视空间的位置由弹簧引力分析模型确定。 (Radviz可视化原理 - CSDN博客) ,能展示一些数据的可区分规律。

数值是皮尔森相关系数,浅颜色表示相关性高,比如Petal.Length(花瓣长度)与 Petal.Width(花瓣宽度)相关性0.96,也就是花瓣长的花,花瓣宽度也大,也就是个大花。

不过,现在做可视化基本上不用python了,具体为什么可以去看我的写的文章,我拿python做了爬虫,BI做了可视化,效果和速度都很好。

finereport

可视化的一大应用就是数据报表,而FineReport可以自由编写整合所需要的报表字段进行报表输出,支持定时刷新和监控邮件提醒,是大部分互联网公司会用到的日常报表平台。

尤其是公司体系内经营报表,我们用的是商业报表工具,就是finereport。推荐他是因为有两个高效率的点:①可以完成从数据库取数(有整合数据功能)—设计报表模板—数据展示的过程。②类似excel做报表,一张模板配合参数查询可以代替几十张报表。

FineBI

简洁明了的数据分析工具,也是我个人最喜欢的可视化工具,优点是零代码可视化、可视化图表丰富,只需要拖拖拽拽就可以完成十分炫酷的可视化效果,拥有数据整合、可视化数据处理、探索性分析、数据挖掘、可视化分析报告等功能,更重要的是个人版免费。

主要优点是可以实现自助式分析,而且学习成本极低,几乎不需要太深奥的编程基础,比起很多国外的工具都比较易用上手,非常适合经常业务人员和运营人员。在综合性方面,FineBI的表现比较突出,不需要编程而且简单易做,能够实现平台展示,比较适合企业用户和个人用户,在数据可视化方面是一个不错的选择;

这些是我见过比较常用的,对数据探索有帮助的可视化方法。

6. pandas 追加

  在如何使用Python脚本转换数据和命令行中,我们将深入探讨如何使用Python脚本和命令行来转换数据。

  但是首先,值得提出一个您可能正在思考的问题:“ Python如何适合命令行,为什么当我知道我可以使用IPython笔记本完成所有数据科学工作时,为什么还要使用命令行与Python进行交互?还是Jupyter实验室?”

  笔记本非常适合快速进行数据可视化和探索,但是Python脚本是将我们学到的东西投入生产的一种方式。假设您想建立一个网站,以帮助人们发布具有理想标题和提交时间的Hacker News帖子。为此,您需要脚本。

  本教程假定您具有函数的基本知识,并且有一点命令行经验也不会受到损害。如果您以前从未使用过Python,请随时查看我们涵盖Python函数基础的任务,或者更深入地研究我们的一些数据科学课程。最近,我们发布了两个新的交互式命令行课程:“ 命令行元素”和“命令行中的文本处理”,因此如果您想更深入地研究命令行,我们也建议您

  也就是说,不必过分担心先决条件!我们将解释我们正在做的所有事情,所以让我们开始吧!

  熟悉数据

  Hacker News是一个站点,用户可以在该站点上通过Internet(通常是有关技术和创业公司)提交文章,而其他人可以“赞扬”这些文章,表示他们喜欢它们。提交的投票越多,在社区中就越受欢迎。热门文章进入Hacker News的“首页”,在其他网站上它们更有可能被他人看到。

  我们将使用的数据集是由Arnaud Drizard使用Hacker News API编译的,可以在此处找到。我们从数据中随机抽取了10000行,并删除了所有多余的列。我们的数据集只有四列:

  submission_time -故事提交时。

  upvotes -提交的投票数。

  url —提交的基本域。

  headline—提交的标题。用户可以对其进行编辑,而不必与原始文章的标题相匹配。

  我们将编写脚本来回答三个关键问题:

  哪些新闻最常出现在头条新闻中?

  哪些域名最常提交给Hacker News?

  大多数文章什么时候提交?

  切记:在编程时,有多种方法可以处理任务。在本教程中,我们将逐步解决这些问题,但是肯定还有其他方法同样有效,因此请随时尝试并尝试提出自己的方法!

  使用命令行和Python脚本读取数据

  要加注星标,让我们Transforming_Data_with_Python在桌面上创建一个文件夹。要使用命令行创建文件夹,可以使用mkdir命令,后跟文件夹名称。例如,如果要创建一个名为的文件夹test,则可以导航到Desktop目录,然后键入mkdir test。

  我们将稍后讨论为什么创建文件夹,但是现在,让我们使用cd命令导航到创建的文件夹。该cd命令允许我们使用命令行更改目录。

  尽管有多种使用命令行创建文件的方法,但我们可以利用一种称为管道传输和重定向输出的技术来一次完成两件事:将输出从stdout(命令行生成的标准输出)重定向到文件中并创建一个新文件!换句话说,我们可以让它创建一个新文件并使它的输出成为该文件的内容,而不是让命令行仅打印其输出。

  要做到这一点,我们可以使用>和>>,这取决于我们想用文件来完成。如果文件不存在,两者都会创建一个文件;但是,>将使用重定向的输出覆盖文件中已有的文本,同时>>将任何重定向的输出附加到文件中。

  我们希望将数据读入该文件并创建一个描述性的文件名和函数名称,因此我们将创建一个名为的函数,load_data()并将其保存在名为的文件中read.py。让我们使用读取数据的命令行创建函数。为此,我们将使用该printf函数。(我们将使用printf它,因为它允许我们打印换行符和制表符,我们将使用它们来使脚本对自己和其他人更具可读性)。

  为此,我们可以在命令行中输入以下内容

  printf "import pandas as pd\n\ndef load_data():\n\thn_stories = pd.read_csv('hn_stories.csv')\n\thn_stories.colummns = ['submission_time', 'upvotes', 'url', 'headline']\n\treturn(hn_stores)\n" > read.py

  检查上面的代码,有很多事情要做。让我们将其分解。在函数中,我们是:

  a.请记住,我们要使脚本可读,我们正在使用printf命令通过命令行生成一些输出,以在生成输出时保留格式。

  b.进口大熊猫。

  c.将数据集(hn_stories.csv)读入pandas数据框。

  d.使用df.columns列名添加到我们的数据帧。

  e.创建一个名为的函数load_data(),其中包含用于读取和处理数据集的代码。

  f.利用换行符(\n)和制表符(\t)保留格式,因此Python可以读取脚本。

  g.将输出重定向printf到read.py使用>运算符调用的文件。由于read.py尚不存在,因此已创建文件。

  运行上面的代码后,我们可以cat read.py在命令行中键入并执行命令以检查的内容read.py。如果一切正常运行,我们的read.py文件将如下所示:

  创造 __init__.py

  在该项目的其余部分,我们将创建更多脚本来回答我们的问题并使用该load_data()函数。尽管我们可以将该函数粘贴到使用该函数的每个文件中,但是如果我们正在处理的项目很大,则可能会变得非常麻烦。

  为了解决这个问题,我们可以创建一个名为的文件__init__.py。本质上,__init__.py允许文件夹将其目录文件视为包。最简单的形式__init__.py可以是一个空文件。它只需要存在就可以将目录文件视为包。您可以在Python文档中找到有关包和模块的更多信息。

  因为load_data()是中的函数read.py,所以我们可以使用导入包的相同方法来导入该函数:from read import load_data()。

  还记得使用命令行创建文件的多种方法吗?我们可以使用另一个命令来创建文件__init__.py这次,我们将使用该touch命令来创建文件。touch是一个在您运行命令后立即为您创建一个空文件的命令:

  探索标题中的单词

  现在,我们已经创建了一个脚本来读取和处理数据以及创建的数据__init__.py,我们可以开始分析数据了!我们要探索的第一件事是标题中出现的独特词。为此,我们要执行以下操作:

  1)count.py使用命令行创建一个名为的文件。

  2)load_data从导入read.py,并调用函数以读取数据集。

  3)将所有标题合并为一个长长的字符串。当您合并标题时,我们希望在每个标题之间留一个空格。在此步骤中,我们将使用Series.str.cat连接字符串。

  4)将长字符串拆分成单词。

  5)使用Counter类可以计算每个单词在字符串中出现的次数。

  6)使用该.most_common()方法将100个最常用的单词存储到wordCount。

  如果使用命令行创建此文件,则外观如下:

  printf "from read import load_data\nfrom collections import Counter\n\nstories = load_data()\nheadlines = stories['headline'].str.cat(sep = ' ').lower()\nwordCount = Counter(headlines.split(' ')).most_common(100)\nprint(wordCount)\n" > count.py

  运行上面的代码后,您可以cat count.py在命令行中键入并执行命令以检查的内容count.py。如果一切正常运行,您的count.py文件将如下所示:

  现在,我们已经创建了Python脚本,我们可以从命令行运行脚本以获取一百个最常用单词的列表。要运行脚本,我们从命令行键入python count.py命令。

  脚本运行后,您将看到以下打印结果:

  [('the', 2045), ('to', 1641), ('a', 1276), ('of', 1170), ('for', 1140), ('in', 1036), ('and', 936), ('', 733), ('is', 620), ('on', 568), ('hn:', 537), ('with', 537), ('how', 526), ('-', 487), ('your', 480), ('you', 392), ('ask', 371), ('from', 310), ('new', 304), ('google', 303), ('why', 262), ('what', 258), ('an', 243), ('are', 223), ('by', 219), ('at', 213), ('show', 205), ('web', 192), ('it', 192), ('–', 184), ('do', 183), ('app', 178), ('i', 173), ('as', 161), ('not', 160), ('that', 160), ('data', 157), ('about', 154), ('be', 154), ('facebook', 150), ('startup', 147), ('my', 131), ('|', 127), ('using', 125), ('free', 125), ('online', 123), ('apple', 123), ('get', 122), ('can', 115), ('open', 114), ('will', 112), ('android', 110), ('this', 110), ('out', 109), ('we', 106), ('its', 102), ('now', 101), ('best', 101), ('up', 100), ('code', 98), ('have', 97), ('or', 96), ('one', 95), ('more', 93), ('first', 93), ('all', 93), ('software', 93), ('make', 92), ('iphone', 91), ('twitter', 91), ('should', 91), ('video', 90), ('social', 89), ('&', 88), ('internet', 88), ('us', 88), ('mobile', 88), ('use', 86), ('has', 84), ('just', 80), ('world', 79), ('design', 79), ('business', 79), ('5', 78), ('apps', 77), ('source', 77), ('cloud', 76), ('into', 76), ('api', 75), ('top', 74), ('tech', 73), ('javascript', 73), ('like', 72), ('programming', 72), ('windows', 72), ('when', 71), ('ios', 70), ('live', 69), ('future', 69), ('most', 68)]

  在我们的网站上滚动浏览它们会有些尴尬,但是您可能会注意到最常见的词,例如等等。这些词被称为停用词the,to a for这些词对人类语音很有用,但对数据分析没有任何帮助。您可以在我们的spaCy教程中找到更多有关停用词的信息;如果要扩展此项目,则从我们的分析中删除停用词将是一个有趣的下一步。

  即使包含了停用词,我们也可以发现一些趋势。除了停用词之外,这些词中的绝大多数都是与技术和创业相关的术语。考虑到HackerNews专注于科技创业公司,这并不奇怪,但是我们可以看到一些有趣的特定趋势。例如,谷歌是该数据集中最常提及的品牌。Facebook,Apple和Twitter等其他品牌也是讨论的热门话题。

  探索域提交

  现在我们已经探索了不同的标题并显示了前100个最常用的词,现在我们可以探索域提交了!为此,我们可以执行以下操作:

  1)domains.py使用命令行创建一个名为的文件。

  2)load_data从导入read.py,并调用函数以读取数据集。

  3)使用value_counts()大熊猫中的方法来计算列中每个值的出现次数。

  4)遍历该系列并打印索引值及其关联的总数。

  这是命令行形式的外观:

  printf "from read import load_data\n\nstories = load_data()\ndomains = stories['url'].value_counts()\nfor name, row in domains.items():\n\tprint('{0}: {1}'.format(name, row))\n" > domains.py

  再一次,如果我们cat domains.py在命令行中输入来检查domains.py,我们应该看到:

  探索提交时间

  我们想知道大多数文章何时提交。一种简单的重组方法是查看文章的提交时间。为了弄清楚这一点,我们需要使用该submission_time列。

  该submission_time列包含如下时间戳:2011-11-09T21:56:22Z。这些时间以UTC表示,UTC是大多数软件用于保持一致性的通用时区(想象一个数据库中填充的时间都具有不同的时区;要使用它会非常麻烦)。

  要从时间戳获取小时,我们可以使用该dateutil库。中的parser模块dateutil包含parse函数,该函数可以带一个时间戳,如何使用Python脚本转换数据和命令行https://www.aaa-cg.com.cn/data/2304.html并返回一个datetime对象。这是文档的链接。解析时间戳后,hour结果日期对象的属性将告诉您文章提交的时间。

  为此,我们可以执行以下操作:

  1)times.py使用命令行创建一个名为的文件。

  2)编写一个函数以从时间戳中提取小时。此函数应首先用于dateutil.parser.parse解析时间戳,然后从结果datetime对象中提取小时,然后使用来返回小时.hour。

  3)使用pandas apply()方法创建提交时间列。

  4)使用value_counts()大熊猫中的方法来计算每小时发生的次数。

  5)打印结果。

  我们在命令行中执行以下操作:

  printf "from dateutil.parser import parse\nfrom read import load_data\n\n\ndef extract_hour(timestamp):\n\tdatetime = parse(timestamp)\n\thour = datetime.hour\n\treturn hour\n\nstories = load_data()\nstories['hour'] = stories['submission_time'].apply(extract_hour)\ntime = stories['hour'].value_counts()\nprint(time)" > times.py

  这是它看起来像一个单独.py文件的样子(如上所述,您可以通过cat times.py从命令行运行以检查文件来进行确认):

  现在,我们已经创建了Python脚本,我们可以从命令行运行脚本,以获取特定时间内发布了多少篇文章的列表。为此,您可以从命令行键入python times.py命令。运行此脚本,您将看到以下结果:

  您会注意到大多数提交内容是在下午发布的。但是请记住,这些时间是UTC时间。如果您有兴趣扩展此项目,请尝试在脚本中添加一个部分,以将UTC的输出转换为本地时区。

  下一步

  在如何使用Python脚本转换数据和命令行中,我们探索了数据并建立了一个短脚本目录,这些短脚本可相互配合以提供所需的答案。这是构建我们的数据分析项目的生产版本的第一步。

  但是,当然,这仅仅是开始!在如何使用Python脚本转换数据和命令行中,我们没有使用过upvotes数据,因此这是扩展分析范围的一个不错的下一步:

  a.标题长度最大才能获得最多投票?

  b.提交时间最多的是什么?

  c.投票总数随时间变化如何?

  我们鼓励您结合自己的问题,并在继续探索此数据集时发挥创造力!

https://www.toutiao.com/i6831049808313057804/

7. pandas追加写入一行到Excel

我要介绍的第一项任务是把某几列相加然后添加一个总和栏。首先我们将excel 数据 导入到pandas数据框架中。import pandas as pdimport numpy as npdf = pd.read_excel("excel-comp-data.xlsx")df.head()

8. pandas写入数据

两种方法可以实现。

第一,导入numpy,将文本数据导入txt文档,然后通过函数load就可以读取txt文件,就可以导入文本数据了。

第二,导入pandas包,将文本文件等距插入excel表,然后通过read_txt来读取excel文件,这样也可以导入文本数据。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片