2016 - 2024

感恩一路有你

c语言怎么把csv文件变成数组 如何使用Python Pandas模块读取各类型文件?

浏览量:3864 时间:2023-06-26 15:11:21 作者:采采

如何使用Python Pandas模块读取各类型文件?

Python的pandas库是使Python下一界应用于数据分析的出众编程语言的一件事。Pandas使导入,分析和可视化数据变的越来越太容易。它建立在NumPy和matplotlib之类的软件包的基础上,使您可以方便啊地通过大部分数据分析和可视化工作。

在此Python数据科学教程中,我们将可以使用EricGrinstein破霸体的数据,在用Pandas分析不知从何而来流行的视频游戏评论网站IGN的视频游戏评论。哪个主机最终胜利了“控制台大战”(就游戏的审查而言)?该数据集将解决我们找出答案。

当我们分析视频游戏评论时,我们将了解重要的Pandas概念,或者索引。您可以不再参与开去,并在我们的许多其他Python教程之一中或注册PythonPandas课程来所了解有关Python和Pandas的更多信息。我们的许多其他数据科学课程也都建议使用Pandas。

谨记在心再看看,本教程建议使用Python3.5编写,并在用JupyterNotebook最终形成。您可能会在用的是Python,pandas和Jupyter的更新版本,但而应该是基本上相同。

用Pandas导入数据

如果不是您正在不使用本教程,则是需要可以下载数据集,您也可以在此处参与不能操作。

我们将采取的措施的不过在此之前是读取数据。数据以逗号互相连通的值或csv文件存储,其中每一行用换行分隔开来,每列用逗号(,)分隔。这是ign.csv文件的前几行:

如您在上方看到的,文件中的每一行代表一个游戏,该游戏也过IGN审查。这些列包涵或是该游戏的信息:

1)score_phrase—IGN该如何用一个词用来形容游戏。这链接到它收到消息的分数。

2)title-游戏名称。

3)url—您可以不在其中一栏求下载评论的URL。

4)platform-审查游戏的平台(PC,PS4等)。

5)score—游戏的内线得分,从1.0到10.0。

6)genre—游戏类型。

7)editors_choice-N要是游戏并非编辑选择的Y话,这样是。这与得分息息相关。

8)release_year-游戏先发布的年份。

9)release_month-游戏公告的月份。

10)release_day-游戏先发布的那天。

还有一个前导列,其中中有行索引值。我们这个可以放心吧地忽略此列,但稍候将深入交流哪些索引值。

是为在Python和pandas中比较有效地全面处理数据,我们不需要将csv文件读取到PandasDataFrame中。DataFrame是它表示和去处理表格数据的一种,表格数据是表格形式的数据,.例如电子表格。表格数据更具行和列的格式,看上去像我们的csv文件差不多,可是如果我们也可以将其作为表格栏里点,则对我们更易于泛读和排序。

是为读取数据数据,我们是需要使用_csv函数。此函数将接收一个csv文件并前往一个DataFrame。以下代码将:

a.文件导入pandas库。我们将其修改文件名为,pd以便于慢了地键入。这是数据分析和数据科学中的标准约定,您偶尔会会注意到导入的Pandas就像pd其他人的代码一般。

b.读ign.csv入一个DataFrame,并将结果未分配给一个名为的新变量,reviews尽快我们可以reviews用处引用我们的数据。

读完后DataFrame后,以更直观的去看看我们所完成任务的内容将很有帮助。Pandas比较方便地为我们能提供了两种方法,是可以快速地将数据打印到表中。这些功能是:

1)DataFrame.head()—可以打印DataFrame的前N行,其中N是您以及参数讯息传递给函数的数字,即DataFrame.head(7)。如果没有不传达任何参数,则缺省设置为5。

2)DataFrame.tail()—打印DataFrame的后来N行。同样,默认值为5。

我们将可以使用该head方法一栏其中的内容reviews:

我们还可以不ftp访问属性,以查找以下行reviews:

如我们所见,所有内容均已正确读取文件-我们有18,625行和11列。

与的的的NumPy这样的Python软件包而言,使用Pandas的一大优势是Pandas容许我们强大具高相同数据类型的列。在我们的数据集中在一起,reviews我们有存储浮点值(如)score,字符串值(如score_phrase)和整数(如)的列release_year,所以在此处建议使用NumPy会很困难,但Pandas和Python也可以非常好地如何处理它。

现在我们早正确的地读取文件了数据,让我们正在成立索引reviews以获取所需的行和列。

用Pandas索引DataFrames

之前,我们使用了该head方法来打印出来的第一5行reviews。我们是可以使用方法能完成虽然的事情。该iloc方法不允许我们按位置检索系统行和列。这一点,我们是需要委托所需行的位置包括所需列的位置。下面的代码将reviews.head()你选择行0到5,包括数据集中在一起的所有列来不能复制我们的结果:

让我们更深入地去研究我们的代码:我们指定你了打算的rows0:5。这意味着我们打算从position0到(但不除开)position的行5。

第一行被其实是在位置0,所以选择行0:5给了我们行的位置0,1,2,3,和4。我们也是需要所有列,而且不使用快捷来你选择它们。它的工作是这样的:如果没有我们不比较喜欢第一个位置值,例如:5,那是假设我们的意思0。如果不是我们看出了那一个位置值(如)0:,则根据定义我们是指DataFrame中的最后一行或之后一列。我们不需要所有列,并且只指定了一个冒号(:),没有任何位置。这使我们的列从0到之后一列。以下是一些索引示例在内结果:

1)[:5,:]—第一5行,和这些行的所有列。

2)[:,:]—整个DataFrame。

3)[5:,5:]—从位置5正在的行,从位置结束的列5。

4)[:,0]—第一列,以及该列的所有行。

5)[9,:]—第十行,和泸州银行的所有列。

按位置索引与NumPy索引的很有几分相似。要是您想清楚更多信息,这个可以写作我们的NumPy教程。现在我们明白了了该如何按位置索引,让我们删除掉第一列,该列没有任何用处的信息:

在Pandas中可以使用标签在Python中建立索引

呢既然我们很清楚该如何按位置检索行和列,这样值得去爱去研究在用DataFrames的另一种主要注意方法,即按标签检索到行和列。与NumPy比起,Pandas的要注意优势本质,每一列和每一行都是一个标签。也可以如何处理列的位置,但很难跟踪哪个数字按于哪个列。

我们也可以使用方法处理标签,该方法允许我们可以使用标签而不是位置参与索引。我们这个可以reviews建议使用以上loc方法总是显示前五行:

上面的内容只不过与完全没有太大的不同[0:5,:]。这是是因为尽管行标签可以常规任何值,但我们的行标签与位置完全匹配。您是可以在上方表格的最左侧看见了行标签(它们以粗体总是显示)。您还可以通过ftp连接DataFrame的index属性来一栏它们。我们将没显示的行索引reviews:

Int64Index([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,...],dtypeint64)

不过,索引不一定会老是与位置看操作。在下面的代码单元中,我们将:

a.获取行10至行20的reviews,并分配结果some_reviews。

b.没显示的第一5行some_reviews。

如本所示,在中some_reviews,行索引可以追溯,10结束了于20。并且,尝试loc使用小于等于10或大于的数字20将可能导致错误:

some_reviews.loc[9:21,:]

通常而言,在可以使用数据时,列标签是可以使工作变得更加十分轻松。我们也可以在loc方法中指定你列标签,以按标签而不是按位置数据库检索列。

我们还这个可以是从传入列表来两次指定你多个列:

Pandas系列对象

我们可以几种差别的在Pandas中检索系统单个列。到目前为止,我们早看见了了两种语法:

1)[:,1]—将检索系统第二列。

2)reviews.loc[:,score_phrase]—还将检索系统第二列。

另外第三种甚至连更太容易的方法来检索整列。我们这个可以在方括号中重新指定列名称,或者建议使用字典:

我们还可以按照100元以内方法建议使用列列表:

当我们检索单个列时,实际上是在检索数据库Pandas Series对象。DataFrame存储表格数据,而Series存储数据的单列或单行。

我们可以不验证单个列是否是为系列:

我们可以手动修改系列以好些地所了解其工作原理。要修改一个Series,我们在构造器它时将一个列表或NumPy数组传递给Series对象:

系列可以不真包含任何类型的数据,除开水的混合物类型。在这里,我们修改一个包含字符串对象的系列:

在Pandas中创建角色一个DataFrame

我们可以是从将多个Series传递到DataFrame类中来修改DataFrame。在这里,我们传出刚刚创建家族的两个Series对象,

s1才是第一行,s2作为第二行:

我们还是可以不使用列表列表能够完成虽然的事情。每个内部列表在结果DataFrame中被更视一行:

我们可以在修改DataFrame时更改列标签:

在内行标签(索引):

还请再注意,不不需要蜷进和另外的行。我们也以这种编译程序了代码,以使其更很易解析,但是您你经常会遇见将它们所有的书写一行的情况。或者,200元以内代码将产生与我们在本段上方的表中看见的结果全部是一样的的结果:

无论如何都,添加标签后,便可以不使用它们对DataFrame通过索引:

columns如果将字典传信给DataFrame构造函数,则是可以跳过委托关键字参数的操作。这将自动出现设置里列名称:

PandasDataFrame方法

如前所述,scikit-learnDataFrame中的每一列是Series对象:

我们这个可以在Series对象上调用与在DataFrame上是可以调用的大多数同一的方法,除开head:

PandasSeries和DataFrames还更具其他使换算更很简单方法。的或,我们也可以使用方法来直接输入Series的均值:

我们还这个可以内部函数类似的方法,该方法设置成情况下将直接输入DataFrame中每个数字列的平均值:

我们可以不可以修改axis关键字参数以mean计算每行或每列的平均值。默认情况下,axis=0,并将计算出每列的平均值。我们还也可以将其设置中1为可以计算每行的平均值。请注意,这只会计算每一行中数值的平均值:

(axis1)

0510.500

1510.500

2510.375

3510.125

4510.125

5509.750

6508.750

7510.250

8508.750

9509.750

10509.875

11509.875

12509.500

13509.250

14509.250

...

18610510.250

18611508.700

18612509.200

18613508.000

18614515.050

18615515.050

18616508.375

18617508.600

18618515.025

18619514.725

18620514.650

18621515.000

18622513.950

18623515.000

18624515.000

Length:18625,dtype:float64

Series和DataFrames上有很多的的的方法suppose。这里有一些方便些的东西:

1)—里查DataFrame中各列之间的相关性。

2)—可以计算每个DataFrame列中非空值的数量。

3)—在每一列中可以找到的最值。

4)—直接输入每一列中的最小值。

5)—查看每列的中位数。

6)—中搜索每列的标准偏差。

.例如,我们可以不使用该corr方法打开系统如何确定有任何列与关联score。这也可以说说我们最近先发布的游戏完成任务了更高的评价(release_year),应该在年底之前公告的游戏完成了更好的评分(release_month):

而就我们在上面看到的这样,我们的数字列都是没有与关联score,但我们明白发布时间与评论评分却不是线性相关。

DataFrameMath与Pandas

我们还可以在用pandas在Python中的Series或DataFrame对象上不能执行数算。比如,我们可以不将score列中的每个值乘以2以将刻度从0–快速切换10到0–5:

reviews[score]/2

04.50

14.50

24.25

34.25

44.25

53.50

61.50

74.50

81.50

93.50

103.75

113.75

123.50

134.50

144.50

...

186103.00

186112.90

186123.90

186134.00

186144.60

186154.60

186163.75

186174.20

186184.55

186193.95

186203.80

186214.50

186222.90

186235.00

186245.00

Name:score,Length:18625,dtype:float64

所有广泛的数算符在Python的工作,如,-,*,/,和^将在系列或DataFrames大Pandas的工作,另外将可以参照于每一个元素在一个数据帧或一个系列。

Pandas中的布尔索引

现在我们已经知道一点了一些Pandas的基础知识,让我们再通过分析。我们前面看见的,平均都在值的score列reviews左右7。如果不是我们想找到所有得分多都高于平均水平的游戏怎么办啊?

我们是可以先参与比较好。比较好会将“系列”中的每个值与更改值接受比较好,然后生成气体一个“系列”,其中乾坤二卦它表示比较状态的布尔值。使用Python Pandas总结视频游戏数据或者,我们可以看见哪些行的score值大于07:

score_filterreviews[score]a87

score_filter

0True

1True

2True

3True

4True

5False

6False

7True

8False

9False

10True

11True

12False

13True

14True...

18610False

18611False

18612True

18613True

18614True

18615True

18616True

18617True

18618True

18619True

18620True

18621True

18622False

18623True

18624True

Name:score,Length:18625,dtype:bool

有了布尔系列后,我们可以建议使用它来你选DataFrame中该系列包含value的行True。所以,我们没法选择类型行reviews,其中score大于07:

可以不可以使用多个条件进行过滤。假设不成立我们要里查根据重新发行Xbox One的得分远远超过的游戏7。在下面的代码中,我们:

a.系统设置两个条件的过滤器:

1)检查是否score大于07。

2)检查有无platform成比例Xbox One

b.应用过滤器以reviews仅某些所需的行。

c.可以使用head方法再打印的第一5行filtered_reviews。

在在用多个条件参与过滤时,将每个条件装在括号中并用一个amp符号(amp)分隔开来是很重要的。

Pandas图

现在我们很清楚要如何过滤处理,我们可以修改图以观察的重新回顾分布特点Xbox One与的回忆一下广泛分布PlayStation 4。这将解决我们判断哪个控制台具高更好的游戏。

我们可以实际直方图来做到这一点,该直方图将绘制图有所不同得分范围内的频率。我们可以不使用方法为每个控制台可以制作一个直方图。该方法用来幕后的流行Python绘图库matplotlib生成美观的绘图。

该plot方法默认为草图折线图。我们是需要传入关键字参数kindhist来绘制直方图。在下面的代码中,我们:

a.可致电%matplotlibinline以在Jupyter笔记本中设置中绘图。

b.过滤reviews以仅真包含或者的数据Xbox One。

c.绘制图score列。

我们也这个可以对PS4:

从我们的直方图中更说明,与比起,PlayStation 4具有更高评级的游戏Xbox One。

想来,这仅仅冰山一角,涉及到我们也可以为了结论该数据集的潜在方向,但我们已经有了另一个挺好的的开端:我们已经可以使用Python和pandas再导入了数据集,并要会了使用各种有所不同的索引方法选择我们要想的数据点,并接受了一些飞快的探索性数据分析,以解释我们开始时遇到的问题。

值不可用错误怎么替换成0?

走过弯路,多多分享我遇到的情况:

1、其他系统导出的csv或excel数据未知非再打印字符(看不见的Unicode码)或空格。

解决方法:用LEN()函数这个可以可以确定单元格内如何确定有多余的字符,然后再用CLEAN()彻底清除非不打印字符、用TRIM()清除掉单元格内的空格。

2、单元格的格式不点对称,table_array与lookup_value的格式不同一,比如:一个为文本两个为数字。

解决方法:选中单元格(可多选)用alt键Ctrl1菜单里单元格格式,将table_array与lookup_value的单元格格式设置为同一格式,的或:都为数字。

数据 方法 Pandas DataFrame

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。