Pandas安装与对象使用(educoder)
Python,头歌,pandas
第1关:安装并使用Pandas
任务描述
本关任务:输出Pandas
的版本号。
相关知识
在安装 Pandas
之前,确保你的操作系统中有 NumPy
。如果你是从源代码直接编译,那么还需要相应的工具编译建立 Pandas
所需的C
语言与 Cython
代码。详细的安装方法,请参考 Pandas官方文档 。如果你按照前言的建议使用了Anaconda
,那么 Pandas
就已经安装好了。
平台已经安装Anaconda
,所以不需要再安装Pandas
库。
编程要求
本关的编程任务是补全右侧编辑器中的demo()
函数,要求通过__version__
查看Pandas
当前版本号。
- 具体要求请参见后续测试样例。
请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入: 无测试输入
预期输出: 0.23.0
开始你的任务吧,祝你成功!
代码:
import pandas as pd
def demo():
#将pandas的版本号赋值给version_number
#********** Begin **********#
version_number =pd.__version__
#********** End **********#
return version_number
第2关:Pandas的Series对象
任务描述
本关任务:使用任意一个方法创建一个Series
对象。
相关知识
Pandas
的Series
对象是能够保存任何类型的数据(整数,字符串,浮点数,Python
对象等)的一维数组,可以用一个数组创建Series
对象。
In: data = pd.Series([0.25, 0.5, 0.75, 1.0])
In: data
Out: 0 0.25
1 0.50
2 0.75
3 1.00
dtype: float64
从上面的结果发现Series
对象将一组数据和一组索引绑定在一起,我们可以通过values
属性和index
属性获取数据,values
返回的结果与Numpy
数组类似,index
返回结果是一个类型为pd.Index
的类数组对象。
In: data.values
Out: array([ 0.25, 0.5 , 0.75, 1. ])
In: data.index
Out: RangeIndex(start=0, stop=4, step=1)
Series
和Numpy
数组一样,数据可以通过Python
的中括号索引标签获取。而且比Numpy
数组更加通用、灵活。
In: data[1]
Out: 0.5
In: data[1:3]
Out: 1 0.50
2 0.75
dtype: float64
创建Series对象
创建Pandas
的Series
对象的方法:
pd.Series(data,index=index)
其中,index
是一个可选参数,默认为np.arange(n)
,data
参数支持多种数据类型。
Series是通用的Numpy数组
Series
对象和一维Numpy
数组基本可以等价交换,但两者间的本质差异其实是索引:NumPy
数组通过隐式定义的整数索引获取数值,而Pandas
的Series
对象用一种显式定义的索引与数值关联。 显式索引的定义让Series
对象拥有了更强的能力。例如,索引不再仅仅是整数,还可以是任意想要的类型。
In: data = pd.Series([0.25, 0.5, 0.75, 1.0], index=['a', 'b', 'c', 'd'])
Out: a 0.25
b 0.50
c 0.75
d 1.00
dtype: float64
In: data["b"]
Out: 0.5
Series是特殊的字典
你可以把Pandas
的Series
对象看成一种特殊的Python
字典。字典是一种将任意键映射到一组任意值的数据结构,而Series
对象其实是一种将类型键映射到一组类型值的数据结构。我们可以直接用Python
的字典创建一个Series
对象,让Series
对象与字典的类比更加清晰。
In: population_dict = {'California': 38332521,'Texas': 26448193, 'New York': 19651127, 'Florida': 19552860, 'Illinois': 12882135}
In: population = pd.Series(population_dict)
In: population
Out: California 38332521
Florida 19552860
Illinois 12882135
New York 19651127
Texas 26448193
dtype: int64
用字典创建 Series
对象时,其索引默认按照顺序排列。典型的字典数值获取方式仍然有效,而且还支持数组形式的切片操作等。
In: population['California']
Out: 38332521
In: population['California':'Illinois']
Out: California 38332521
Florida 19552860
Illinois 12882135
dtype: int64
编程要求
本关的编程任务是补全右侧上部代码编辑区内的相应代码,创建一个Series
对象,并输出。
- 具体要求请参见后续测试样例。
请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入中的第一行为
Series
对象中的列索引,第二行为Series
对象中每一行的值。
测试输入: a,b,c,d,e,f
6,5,4,2,1,3
预期输出:
a 6
b 5
c 4
d 2
e 1
f 3
dtype: object
开始你的任务吧,祝你成功!
代码:
import pandas as pd
a = input() # 输入的是一个字符串,详细数据可查看测试集
b = input()
# 使用任意方法创建一个Series对象,并输出
#********* Begin **********#
c=a.split(",")
d=b.split(",")
data=pd.Series(d,index=c)
print(data)
#********* Begin **********#
第3关:Pandas的DataFrame对象
任务描述
本关任务:分别使用Series
对象和字典类型数据创建一个DataFrame
对象。
相关知识
Pandas
的另一个基础数据结构是DataFrame
。和上一节介绍的 Series
对象一样,DataFrame
既可以作为一个通用型NumPy
数组,也可以看作特殊的Python
字典。
创建DataFrame对象
Pandas
的DataFrame
对象可以通过许多方式创建,这里举几个常用的例子。
- 通过数组创建:
pd.DataFrame(array, index=list0, columns=list1) #list表示一个列表
- 通过单个
Series
对象创建:pd.DataFrame(Series,columns=list)
- 通过字典列表创建:
data = [{'a': i, 'b': 2 * i} for i in range(3)] pd.DataFrame(data)
DataFrame是通用的NumPy数组
如果将Series
类比为带灵活索引的一维数组,那么DataFrame
就可以看作是一种既有灵活的行索引,又有灵活列名的二维数组,你也可以把DataFrame
看成是有序排列的若干Series
对象。这里的“排列”指的是它们拥有共同的索引index
。# 创建Series对象
In: area_dict = {'California': 423967, 'Texas': 695662, 'New York': 141297, 'Florida': 170312, 'Illinois': 149995}
In: population_dict = {'California': 38332521,'Texas': 26448193, 'New York': 19651127, 'Florida': 19552860, 'Illinois': 12882135}
In: population = pd.Series(population_dict)
In: area = pd.Series(area_dict)
# 创建DataFrame对象
In: states = pd.DataFrame({'population': population, 'area': area})
In: states
Out: area population
California 423967 38332521
Florida 170312 19552860
Illinois 149995 12882135
New York 141297 19651127
Texas 695662 26448193
Series
对象一样,DataFrame
也有一个index
属性可以获取索引标签。另外,DataFrame
还有一个columns
属性,是存放列标签的Index
对象。In: states.columns
Out: Index(['area', 'population'], dtype='object')
DataFrame是特殊的字典
与Series
类似,我们也可以把DataFrame
看成一种特殊的字典。字典是一个键映射一个值,而DataFrame
是一列映射一个Series
的数据。例如,通过area
的列属性可以返回包含面积数据的Series
对象。
In: states['area']
Out: California 423967
Florida 170312
Illinois 149995
New York 141297
Texas 695662
Name: area, dtype: int64
注意:在
NumPy
的二维数组里,data[0]
返回第一行;而在DataFrame
中,data['列名']
返回与列名相匹配的那一列。
编程要求
本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求实现如下功能:
-
将数据转换为
Series
对象 然后通过Series
对象创建一个DataFrame
对象,并输出; -
将数据转换为字典,然后通过字典创建一个
DataFrame
对象,并输出; -
具体要求请参见后续测试样例。
请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入的第一行为列索引,第二行为第一列数据,第三行为第二列数据。
测试输入: 1,2,3,4,6
a,aa,aaa,aaaa,aaaaa
b,bb,bbb,bbbb,bbbbb
预期输出:
first second
1 a b
2 aa bb
3 aaa bbb
4 aaaa bbbb
6 aaaaa bbbbb
first second
1 a b
2 aa bb
3 aaa bbb
4 aaaa bbbb
6 aaaaa bbbbb
开始你的任务吧,祝你成功!
代码:
import pandas as pd
index = input() # 输入的是一个字符串,用于列索引,详细数据请查看测试集
value1 = input() # DataFrame对象的第一列数据
value2 = input() # DataFrame对象的第二列数据
# 将数据转换为Series对象 然后通过Series对象创建一个DataFrame对象,然后输出
#********** Begin **********#
data={'first':pd.Series(value1.split(','),index=index.split(',')),
'second':pd.Series(value2.split(','),index=index.split(','))}
dp=pd.DataFrame(data)
print(dp)
#********** End **********#
# 将数据转换为字典,然后通过字典创建一个DataFrame对象,然后输出
#********** Begin **********#
data={'first':value1.split(','),'second':value2.split(',')}
dp=pd.DataFrame(data,index=index.split(','))
print(dp)
#********** End **********#
第4关:Pandas的Index对象
任务描述
本关任务:获取两个Series
对象的Index
对象,然后求它们的并集和交集。
相关知识
从以上几个实训可以看出Series
和DataFrame
对象都使用便于引用和调整的显式索引。Pandas
的Index
对象是一个很有趣的数据结构,可以将它看作是一个不可变数组或有序集合(实际上是一个多集,因为Index
对象可能会包含重复值)。
创建一个简单的Index
对象:
In: pd.Index([2, 3, 5, 7, 11])
Out: Int64Index([2, 3, 5, 7, 11], dtype='int64')
将Index看作不可变数组
Index
对象得许多操作都像数组。可以通过标准Python
的取值方法获取数值,也可以通过切片获取数值。
In: ind[1]
Out: 3
In: ind[::2]
Out: Int64Index([2, 5, 11], dtype='int64')
Index
对象还有许多与NumPy
数组相似的属性。
In: print(ind.size, ind.shape, ind.ndim, ind.dtype)
Out: 5 (5,) 1 int64
Index
对象与NumPy
数组之间的不同在于,Index
对象的索引是不可变的,也就是说不能通过通常的方式进行调整。
ind[1] = 0 # 这种操作是不可取的,会报错
将Index看作有序集合
Pandas
对象被设计用于实现许多操作,如连接(join
)数据集,其中会涉及许多集合操作。Index
对象遵循Python
标准库的集合(set
)数据结构的许多习惯用法,包括并集、交集、差集等。
In: indA = pd.Index([1, 3, 5, 7, 9])
In: indB = pd.Index([2, 3, 5, 7, 11])
In: indA & indB # 交集
Out: Int64Index([3, 5, 7], dtype='int64')
In: indA | indB # 并集
Out: Int64Index([1, 2, 3, 5, 7, 9, 11], dtype='int64')
In: indA ^ indB # 异或
Out: Int64Index([1, 2, 9, 11], dtype='int64')
这些操作还可以通过调用对象方法来实现,例如indA.intersection(indB)
等。
编程要求
本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求获取两个Series
对象的index
对象,然后求交集与并集,并输出。
- 具体要求请参见后续测试样例。
请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。
测试输入: 无测试输入
预期输出:
交集:Int64Index([1, 3, 4], dtype='int64')
并集:Int64Index([1, 2, 3, 4, 5, 6, 22, 66], dtype='int64')
开始你的任务吧,祝你成功!
代码:
import pandas as pd
def demo4():
data1 = pd.Series([1,2,3,4,66])
data2 = pd.Series([1,22,3,4,5,6])
# 获取两个Series对象的index对象,然后求交集与并集,并输出
#********** Begin **********#
d1=pd.Index(data1)
d2=pd.Index(data2)
a=d1 & d2
b=d1 | d2
print(f'交集:{a}')
print(f'并集:{b}')
#********** Begin **********#
return
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)