python查看数据集的维度、⼤⼩_python数据分析万字⼲货!
⼀个数据集全⽅位解读pa。。。
说到python与数据分析,那肯定少不了pandas的⾝影,本⽂希望通过分析经典的NBA数据集来系统的全⽅位讲解pandas包,建议搭配IDE⼀遍敲⼀边读哦。话不多说,开始吧!
⽬录安装与数据介绍安装与配置
检查数据
探索性分析
pandas数据结构series对象
dataframe对象
访问series元素使⽤索引
使⽤.loc与.iloc
访问dataframe元素使⽤索引
使⽤.loc与.iloc
查询数据集
分类和汇总数据
对列进⾏操作
指定数据类型
数据清洗
数据可视化
⼀、安装与数据介绍pandas的安装建议直接安装anaconda,会预置安装好所有数据分析相关的包,当然也可以使⽤pip安装。
$ pip install pandas既然是数据分析就肯定选择jupyter notebook
$ pip install jupyter接下来就可以进⼊python使⽤pandas对数据进⾏⼀些探索性的分析,将数据保存在⼯作⽬录,然后使⽤
>>>import pandas as pd
>>>nba = pd.read_csv("nba_all_elo.csv")
>>>type(nba)#查看数据类型再看看⼀共有多少数据>>>len(nba)
126314
>>>nba.shape
(126314, 23)现在我们知道数据集中有126,314⾏和23列。但是,如何确定数据集包含NBA的哪些统计数据?可以使⽤以下内容查看前五⾏.head():>>> nba.head()
在jupyter notebook中可以看到,⼀共有23列变量,其中因为列数太多被隐藏了⼀部分,那么怎样可以看到这些变量呢
python怎么读csv数据>>> pd.set_option("lumns", None)可以看到部分数据⼩数点后⾯跟了6位,⽽对于分析来说并没有必要,所以我们调整为
⼩数点后两位
>>> pd.set_option("display.precision", 2)
检查数据
之前已经使⽤Pandas Python库导⼊了CSV⽂件,并⾸先查看了数据集的内容。到⽬前为⽌,我们仅看到了数据集的⼤⼩及前⼏⾏数据。接下来我们来系统地检查数据。
使⽤以下命令显⽰所有列及其数据类型.info():
>>> nba.info()
既然已经了解了数据集中的数据类型,现在该概述每个列包含的值了。可以使⽤.describe():
>>> nba.describe()
.describe()默认情况下仅分析数字列,但是如果使⽤include参数,则可以提供其他数据类型:>>>import numpy as np
>>>nba.describe(include=np.object)
探索性分析接下来接着进⾏对数据集的探索性相关分析
>>>nba["team_id"].value_counts()
BOS 5997
NYK 5769
LAL 5078
...
SDS 11
>>>nba["fran_id"].value_counts()
Name: team_id, Length: 104, dtype: int64
Lakers 6024
Celtics 5997
Knicks 5769
...
Huskies 60
Name: fran_id, dtype: int64可以看到含有队名"Lakers"的队伍打了6024场⽐赛,但其中只有5078场是洛杉矶湖⼈队的⽐赛。出另⼀个"Lakers"团队是哪个>>>nba.loc[nba["fran_id"] == "Lakers", "team_id"].value_counts()
LAL 5078
MNL 946
Name: team_id, dtype: int64
可以看到另⼀⽀湖⼈队是明尼阿波利斯湖⼈("MNL")踢了946场⽐赛。我们甚⾄可以出他们打⽐赛的时间:
>>>nba.loc[nba["team_id"] == "MNL", "date_game"].min()
'1/1/1949'
>>>nba.loc[nba["team_id"] == "MNL", "date_game"].max()
'4/9/1959'
>>>nba.loc[nba["team_id"] == "MNL", "date_game"].agg(("min", "max"))
min 1/1/1949
max 4/9/1959
Name: date_game, dtype: object
⼆、pandas的数据结构尽管DataFrame提供的功能看起来⾮常直观,但是基本概念却很难理解。因此,我们将暂不使⽤庞⼤的NBA数据,从头开始构建⼀些较⼩的Pandas对象分析。
Series对象
Python最基本的数据结构是list,这也是了解pandas.Series对象的⼀个很好的起点。Series是根据列表创建⼀个新对象,⼀个Series对象包含两个组件:值和索引
>>>revenues = pd.Series([5555, 7000, 1980])
>>>revenues
0 5555
1 7000
2 1980
dtype: int64
可以分别使⽤.values和来访问这些组件.index。revenues.values返回中的值Series,⽽revenues.index返回位置索引。
>>>revenues.values
array([5555, 7000, 1980])
>>>revenues.index
RangeIndex(start=0, stop=3, step=1)
⼀个Series也可以具有任意类型的索引。我们可以将此显式索引视为特定⾏的标签:
>>>city_revenues = pd.Series(
... [4200, 8000, 6500],
... index=["Amsterdam", "Toronto", "Tokyo"]
...)
>>>city_revenues
Amsterdam 4200
Toronto 8000
Tokyo 6500
dtype: int64
以下是Series从Python字典构造带有标签索引的的⽅法:
>>>city_employee_count = pd.Series({"Amsterdam": 5, "Tokyo": 8})
>>>city_employee_count
Amsterdam 5
Tokyo 8
dtype: int64
字典键成为索引,⽽字典值即为Series值。就像字典⼀样,Series也⽀持.keys()和in索引:>>>city_employee_count.keys()
Index(['Amsterdam', 'Tokyo'], dtype='object')
>>>"Tokyo" in city_employee_count
True
>>>"New York" in city_employee_count
False
Dataframe对象按照之前的Series⽰例,现在已经有两个Series以城市为键的对象:city_revenues和city_employee_count。我们可以DataFrame通过在构造函数中提供字典将这些对象组合为⼀个。字典键将成为列名,并且值应包含Series对象:>>>city_data =
pd.DataFrame({
... "revenue": city_revenues,
... "employee_count": city_employee_count
...})
>>>city_data
revenue employee_count
Amsterdam 4200 5.0
Tokyo 6500 8.0
Toronto 8000 NaN注意到Pandas⽤NAN替换了employee_count的缺失值。新DataFrame索
引是两个Series索引的并集:>>>city_data.index
Index(['Amsterdam', 'Tokyo', 'Toronto'], dtype='object')就像Series⼀样,DataFrame还将其值存储在NumPy数组中:
>>>city_data.values
array([[4.2e+03, 5.0e+00],
[6.5e+03, 8.0e+00],
[8.0e+03, nan]])
三、访问Series元素在上⾯的部分中,我们已经介绍了pandas的数据结构。我们知道Series对象在⼏种⽅⾯与列表和字典的相似之处。也就意味着我们可以使⽤索引运算符。现在我们来说明如何使⽤两种特定于pandas的访问⽅法:.loc和.iloc。使⽤.loc和.iloc会发现这些数据访问⽅法⽐索引运算符更具可读性。因为在之前的⽂章中已经详细的介绍了这两种⽅法,因此我们将简单介绍。更详细的可以查看【:早起python】之前的⽂章。
使⽤索引运算符
我们先来访问重新city_revenues对象:
>>>city_revenues
Amsterdam 4200
Toronto 8000
Tokyo 6500
dtype: int64我们还可以Series通过标签和位置索引⽅便地访问中的值:>>>city_revenues["Toronto"]
8000
>>>city_revenues[1]
8000我们也可以使⽤负索引和切⽚,就像使⽤列表⼀样:
>>>city_revenues[-1]
6500
>>>city_revenues[1:]
Toronto 8000
Tokyo 6500
dtype: int64
>>>city_revenues["Toronto":]
Toronto 8000
Tokyo 6500
dtype: int64
使⽤.loc和.iloc
索引运算符([])很⽅便,但有⼀个警告。如果标签也是数字怎么办?假设我们必须使⽤如下Series对象则可以按照以下⽅法:
>>>colors = pd.Series(
... ["red", "purple", "blue", "green", "yellow"],
... index=[1, 2, 3, 5, 8]
...)
>>>colors
1 red
2 purple
3 blue
5 green
8 yellow
dtype: object为了避免混淆,Pandas Python库提供了两种数据访问⽅法:.loc指标签索引。.iloc指位置索引。这将会数据访问⽅法更具可读性:>>>colors.loc[1]
'red'
>>>colors.iloc[1]
'purple'colors.loc[1]返回"red"带有标签的元素1。colors.iloc[1]返回"purple"带有索引的元素1。下图就显⽰.loc与.iloc引⽤了哪些元素:
可以看出.loc指向图像右侧的标签索引。⽽iloc指向图⽚左侧的位置索引。
四、访问DataFrame元素由于DataFrame由⼀系列对象组成,所以可以使⽤相同的上⾯的⽅法来访问它的元素。关键的区别是DataFrame 还有⼀些附加维度。所以我们再对列使⽤索引操作符,对⾏使⽤访问⽅法.loc和.iloc。
使⽤索引运算符如果我们将DataFrame的值看成Series字典形式,则可以使⽤index运算符访问它的列>>>city_data["revenue"]
Amsterdam 4200
Tokyo 6500
Toronto 8000
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论