Pandas用法总结
Pandas简介
Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据库所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。Pandas基于两种数据类型:series 和 dataframe
Series
Series是Pandas中最基本的对象,类似一维数组。事实上,Series基本上就是基于NumPy的数组对象来的,和NumPy的数组不同,Series能为数据自定义标签,也就是索引(index),然后通过索引来访问数组中的数据。用法总结如下:
Series对象的创建
# pandas 学习
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
# 一维数组
sel = Series([1,2,3,4])
# 会同时打印索引和对应的元素
print(sel)
# 但通常我们会自己创建索引 index代表索引
# sel= Series(data=[1,2,3,4],index=['a','b','c','d'])
sel = Series(data=[1,2,3,4],index=list('abcd'))
print('数组:')
print(sel)
# 获取内容
print('数组值:',sel.values)
# 获取索引
print('数组下标',sel.index)
# 同时获取索引和值
print('同时获取索引和对应值',list(sel.iteritems()))
# 将字典转换为Series
dict = {'red':100,'back':400,'green':300,'pink':900}
se3 = Series(dict)
print(se3)
Series数据获取
# Series 数据获取
sel = Series(data = [1,2,3,4], index = list('abcd'))
print(sel)
# Series 对象同时支持位置和标签两种方式获取数据
print('索引下标:',sel['c'])
print('位置下标:',sel[2])
# 获取不连续的数据
print('索引下标:')
print(sel[['a','c']])
print('位置下标:')
print(sel[[1,3]])
# 可以使用切片 取数据
print('位置切片:')
print(sel[1:3]) # 左包含右不包含
print('索引切片:')
print(sel['b' : 'd']) # 左右都包含
# 重新赋值索引的值
sel.index = list('dcba')
print(sel)
# reindex 重新索引,会返回一个新的Series(调用reindex将会重新排序,缺失值用NaN填补)
print(sel.reindex(['b','a','c','d','e']))
# drop() 丢弃指定轴上的项
sel = pd.Series(range(10,15))
print(sel)
# drop
print(sel.drop([2,3]))
Series算术运算
# Series 进行算术运算
# 对 Series 的算术运算都是基于 index 来进行的
# 我们可以用 加减乘除(+,-,* ,/)这样的运算对两个 Series 进行运算
# pandas 根据索引 index 对响应的数据进行计算,结果将会以浮点数的形式储存,以避免丢失精度
# 如果 pandas 在 两个 Series 里找不到相同的 index ,对应的位置就返回一个空值 NaN
# series(data ,index) 第一个是数据 第二个是索引 感觉有点别扭
# 只有索引相同才进行计算,否则返回空值 NaN
series1 = pd.Series([1,2,3,4],['London','HongKong','HuBei','Lagos'])
series2 = pd.Series([1,3,6,4],['London','Accra','Lagos','Delhi'])
print(series1)
print('\n')
print(series2)
print('\n')
print(series1-series2)
print('\n')
print(series1+series2)
print('\n')
print(series1*series2)
print('\n')
# 同样也支持numpy 的数组运算
sel = Series(data=[1,6,3,5],index=list('abcd'))
print('原数组:')
print('\n')
print(sel)
print('\n')
print(sel[sel>3]) # 布尔数组过滤 值大于3
print('\n')
print(sel * 2) # 标量乘法
print('\n')
print(np.square(sel)) # 可以直接加入到numpy的数学函数 平方
DataFrame
DataFrame的创建
# DataFrame 的创建
# 二维数据结构(表格形式储存)
# 三个参数 data index columns 分别代表 数据 行索引 列索引
# 使用二维数组
df1 = DataFrame(np.random.randint(0,10,(4,4)),index=[1,2,3,4],columns=['a','b','c','d'])
print(df1)
运行结果:
a b c d
1 2 9 6 1
2 0 5 5 0
3 4 4 7 8
4 4 3 5 2
# 使用字典进行创建(行索引由index决定,列索引由字典的键决定)
dict = {
'Province': ['Guangdong','Beijing','Qinghai','Fujian'],
'pop': [1.3, 2.5, 1.1, 0.7],
'year': [2018, 2018, 2018, 2018]
}
df2 = pd.DataFrame(dict,index=[1,2,3,4])
print(df2)
# 使用 from_dict
dict2 = {'a':[1,2,3],'b':[4,5,6]}
df6 = pd.DataFrame.from_dict(dict2)
print(df6)
# 索引相同的情况下,相同索引的值会相对应,缺少的值会添加NaN
data={
'Name':pd.Series(['zs','ls','we'],index=['a','b','c']),
'Age':pd.Series(['10','20','30','40'],index=['a','b','c','d']),
'country':pd.Series(['中国','日本','韩国'],index=['a','c','b'])
}
df3 = pd.DataFrame(data)
print(df3)
# to_dict() 方法将DataFrame 对象转换为字典
dict = df3.to_dict()
print(dict)
运行结果:
Province pop year
1 Guangdong 1.3 2018
2 Beijing 2.5 2018
3 Qinghai 1.1 2018
4 Fujian 0.7 2018
<