本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1, pandas简介
Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2.Series对象
- Pandas基于两种数据类型: series与dataframe。
- Series是Pandas中最基本的对象,Series类似一种一维数组。事实上,Series基本上就是基于NumPy的数组对象来的。和NumPy 的数组不同,Series能为数据自定义标签,也就是索引(index),然后通过索引来访问数组中的数据。
- Dataframe是一个二维的表结构。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
3,Series进行算术运算操作
"""
对series的算术运算都是基于index进行的。
我们可以用加减乘除(+- */)这样的运算符对两个series进行运算,
Pandas将会根据索引 index,对响应的数据进行计算,结果将会以浮点数的形式存储,以避免丢失精度。
如果Pandas在两个series里找不到相同的 index,对应的位置就返回一个空值 NaN'' '
"""
series1 = pd.Series( [ 1,2,3,4],[ 'London ', 'HongKong' , ' Humbai ' , 'lagos'] )
series2 = pd.Series( [ 1,3,6,4],[ 'London ' , ' Accra ' , 'lagos ' , ' Delhi ' ] )
print ( series1-series2 )
print('*'*30)
print ( series1+series2 )
print('*'*30)
print ( series1*series2)
4,DataFrame的创建
DataFrame(数据表)是一种⒉维数据结构,数据以表格的形式存储,分成若干行和列。通过 DataFrame,你能很方便地处理数据。常见的操作比如选取、替换行或列的数据,还能重组数据表、修改索引、多重筛选等。我们基本上可以把DataFrame理解成一组采用同样索引的Series的集合。调用DataFrame()可以将多种格式的数据转换为DataFrame对象,它的的三个参数data、index和columns分别为数据、行索引和列索引。
5, DataFrame对象常用属性
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
# dataframe常用属性
df_dict = {
'name':['James','Curry','Iversion'],
'age':['18','20','19'],
'national':['us','China','us']
}
df = pd.DataFrame(data=df_dict,index=['0','1','2'])
print(df)
# 获取行数和列数
print(df.shape)
# # 获取行索引
print(df.index.tolist())
# # 获取列索引
print(df.columns.tolist())
# 获取数据的类型
print(df.dtypes)
# 获取数据的维度
print(df.ndim)
# values属性也会以二维ndarray的形式返回DataFrame的数据
print(df.values)
# 展示df的概览
print(df.info())
# 显示头几行,默认显示5行
print(df.head(2))
# 显示后几行
print(df.tail(1))
# 获取DataFrame的列
print(df['name'])
#因为我们只获取一列,所以返回的就是一个 Series
print(type(df['name']))
# 如果获取多个列,那返回的就是一个 DataFrame 类型:
print(df[['name','age']])
print(type(df[['name','age']]))
# 获取一行
print(df[0:1])
# 去多行
print(df[1:3])
# 取多行里面的某一列(不能进行多行多列的选择)
print(df[1:3][['name','age']])
# 注意: df[]只能进行行选择,或列选择,不能同时多行多列选择。
'''
df.loc 通过标签索引行数据
df.iloc 通过位置获取行数据
'''
# 获取某一行某一列的数据
print(df.loc['0','name'])
# 一行所有列
print(df.loc['0',:])
# 某一行多列的数据
print(df.loc['0',['name','age']])
# 选择间隔的多行多列
print(df.loc[['0','2'],['name','national']])
# 选择连续的多行和间隔的多列
print(df.loc['0':'2',['name','national']])
# 取一行
print(df.iloc[1])
# 取连续多行
print(df.iloc[0:2])
# 取间断的多行
print(df.iloc[[0,2],:])
# 取某一列
print(df.iloc[:,1])
# 某一个值
print(df.iloc[1,0])
# 修改值
df.iloc[0,0]='panda'
print(df)
# dataframe中的排序方法
df = df.sort_values(by='age',ascending=False)
# ascending=False : 降序排列,默认是升序
print(df)
6, dataframe修改index、columns
df1 = pd.DataFrame(np.arange(9).reshape(3, 3), index = ['bj', 'sh', 'gz'], columns=['a', 'b', 'c'])
print(df1)
# 修改 df1 的 index
print(df1.index) # 可以打印出print的值,同时也可以为其赋值
df1.index = ['beijing', 'shanghai', 'guangzhou']
print(df1)
# 自定义map函数(x是原有的行列值)
def test_map(x):
return x+'_ABC'
# inplace:布尔值,默认为False。指定是否返回新的DataFrame。如果为True,则在原df上修改,返回值为None。
print(df1.rename(index=test_map, columns=test_map, inplace=True))
# 同时,rename 还可以传入字典,为某个 index 单独修改名称
df3 = df1.rename(index={'bj':'beijing'}, columns = {'a':'aa'})
print(df3)
# 列转化为索引
df1=pd.DataFrame({'X':range(5),'Y':range(5),'S':list("abcde"),'Z':[1,1,2,2,2]})
print(df1)
# 指定一列为索引 (drop=False 指定同时保留作为索引的列)
result = df1.set_index('S',drop=False)
result.index.name=None
print(result)
# 行转为列索引
result = df1.set_axis(df1.iloc[0],axis=1,inplace=False)
result.columns.name=None
print(result)