pandas数据结构
pandas有两个基本的数据结构:Series和DataFrame。
1.Series
Series数据结构类似于一位数组,但它是由一组数据和一组对应的索引组成的。通过一组列表数据即可产生最简单的Series数据。
尝试一下:
from pandas import Series,DataFrame
import pandas as pd
data=Series([2,3,4,5])
print(data)
运行结果:
0 2
1 3
2 4
3 5
dtype: int64
Series 数据的索引在左边,值在右边,如果没有自己设置索引的话,默认索引为0-N,尝试一下设置索引。
from pandas import Series,DataFrame
import pandas as pd
data=Series([2,3,4,5],index=['a','b','c','d'])
print(data)
运行结果:
a 2
b 3
c 4
d 5
dtype: int64
Series数据中的索引和值一一对应,类似于python字典数据,所以可以通过字典数据来创建Series。
尝试如下:
from pandas import Series,DataFrame
import pandas as pd
data={
'华为':2000,
'苹果':6000,
'小米':1299,
'oppo':2999
}
print(Series(data))
运行结果如下:
华为 2000
苹果 6000
小米 1299
oppo 2999
dtype: int64
字典结构是无序的,所以Series也是无序的,我们想按照价格从大到小排列,所以就要按照自己的意愿进行指定索引。
from pandas import Series,DataFrame
import pandas as pd
data={
'华为':2000,
'苹果':6000,
'小米':1299,
'oppo':2999
}
data1=['苹果','oppo','华为','小米']
print(Series(data,index=data1))
这样修改之后,运行结果:
苹果 6000
oppo 2999
华为 2000
小米 1299
dtype: int64
可以看出我们指定索引成功。
2.DataFrame
DataFrame数据是Python数据分析最常用的数据,无论是创建还是引入外部数据,我们首先想到的是如何转换为DataFrame数据,原因是其为表格型数据,类似于Excel。
创建第一个DataFrame数据(创建数据方式有很多,最常用的是传入由数组列表或者元组组成的字典)
from pandas import Series,DataFrame
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉']
}
df=DataFrame(data)
print(df)
战队名称 城市
0 AG超玩会 成都
1 Hero久竞 上海
2 We 上海
3 eStarPro 武汉
打印结果有小瑕疵,通过查阅资料使用 from IPython.display import display
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉']
}
df=DataFrame(data)
display(df)
运行结果:
3.使用DataFrame选取数据
3.1 选取列
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉']
}
df=DataFrame(data)
display(df)
display(df['战队名称'])
运行结果:
更进一步,选取多列数据。
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉']
}
df=DataFrame(data)
display(df)
display(df[['战队名称','城市']])
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
display(df[['战队名称','城市']])
3.2选取行
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a[0:2])
指定性选取行,假设去We和eStarPro
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a['We':'eStarPro'])
假设取AG超玩会和eStarPro行
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a['AG超玩会':'eStarPro'])
会发现一下子全部选取出来了,显然,切片方法选取行有很大局限性,如果想单独选取行可以使用loc和iloc方法实现,例:
选取eStarPro 使用loc
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a.loc['eStarPro'])
使用iloc
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a.iloc[3])
使用iloc选取AG超玩会和eStarPro
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
a=df.set_index('战队名称')
display(a.iloc[[0,3]])
3.3对行和列进行操作(增,删,改,查)
3.3.1 增
在上述的基础上,再增加一个战队信息。
new_data={
'战队名名':'VG',
'城市':'上海',
'人员':10
}
代码如下
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
new_data={
'战队名称':'VG',
'城市':'上海',
'人员':10
}
df=df.append(new_data,ignore_index=True)#忽略索引值
display(df)
假如这都是2019年的信息,这里我们新建一列用于存放该信息。
df['年份']=2019
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
new_data={
'战队名称':'VG',
'城市':'上海',
'人员':10
}
df=df.append(new_data,ignore_index=True)#忽略索引值
df['年份']=2019
display(df)
如何所增加的值不一样,该如何处理呢?
可以传入列表或数组结构数据进行赋值。例:传入数据df['成立年限']=[5,4,6,3,5]
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
new_data={
'战队名称':'VG',
'城市':'上海',
'人员':10
}
df=df.append(new_data,ignore_index=True)#忽略索引值
df['年份']=2019
df['成立年限']=[5,4,6,3,5]
display(df)
声明:数据是自己随意添加的,只是做自己学习数据使用。
3.3.2 删
如果去掉一个战队该如何实现呢?
通过drop方法
from pandas import Series,DataFrame
from IPython.display import display
import pandas as pd
data={
'战队名称':['AG超玩会','Hero久竞','We','eStarPro'],
'城市':['成都','上海','上海','武汉'],
'人员':[10,11,8,5]
}
df=DataFrame(data)
display(df)
new_data={
'战队名称':'VG',
'城市':'上海',
'人员':10
}
df=df.append(new_data,ignore_index=True)#忽略索引值
df['年份']=2019
df['成立年限']=[5,4,6,3,5]
display(df)
new_df=df.drop(2)
display(new_df)
删除年份列
new_df=df.drop('年份',axis=1)
display(new_df)