2008年,Wes Mckinney 开始开发一个用于分析金融数据的工具库,于2009年开源。仅此于scikit-learn之后,深受开发者的宠爱。
Pandas的Github地址
Pandas
是当前最流行、最常用的数据分析工具。当处理表格数据(比如存储在电子表格或数据库中的数据)时,pandas是最适合您的工具。它将帮助您探索、清理和处理您的数据。数据表被称为DataFrame,panda支持与多种文件格式或数据源的集成(csv、excel、sql、json、parquet…)。从每个数据源导入数据是由前缀为read *的函数提供的。类似地,to_*方法用于存储数据……选择或过滤特定的行和或列?过滤条件下的数据?在pandas中可以使用切片、选择和提取所需数据的方法。它是基于numpy,且集成了matplotlib模块。
- 全面支持数据分析项目的研发步骤 ( 获取->清洗 -> 处理并计算 -> 视图分析 );
- 提供获取、存储数据功能 ( csv、json、excel… );
- 清洗数据及扩充数据类型;
- 对数据进行过滤、选择;
- 聚合计算 ( max、min、mean… );
- 可视化图表。
# 导入模块
import pandas as pd
from pandas import Series
# 1、一维数组
sel = Series(data=[1,2,3,4], index=['a','b','c','d'])
result= list(sel.iteritems())
""" Result:
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
"""
Series:一维数组,可通过index创建索引。
# 2、传入字典
dict = {"rad" : 100,'ji':200,'sad':900,'koo':800}
sel1 = Series(data=dict)
""" Result:
rad 100
ji 200
sad 900
koo 800
dtype: int64
"""
Series:传入字典,直接将转化键为索引。
# 3、重新设定索引
new_sel= sel.reindex(['b','a','c','d','e'])
""" Result:
b 2.0
a 1.0
c 3.0
d 4.0
e NaN
dtype: float64
"""
Series:
reindex
重新索引,会返回一个新的Series
(调用reindex将会重新排序,缺失值用NaN
填补)。
注:此时的Series
从int
类型经reindex
后转化成了float64
类型,原因:NaN
的类型是float64
。
# 4、删除数据
sel2 = pd.Series(range(4,10))
data = sel2.drop([2,3])
""" Result:
0 4
1 5
4 8
5 9
dtype: int64
"""
Series:
drop
(索引)删除数据 返回删除后的数据。
注:Series
中的索引与列表的索引使用方法相同。
# 5、计算
sel3 = pd.Series(data=[12,23,14,15],index=['Aree','Rree','Miie','Kiie'])
sel4 = pd.Series(data=[11,13,24,25],index=['Oree','Rree','Aiie','Diie'])
""" Result:
Aiie NaN
Aree NaN
Diie NaN
Kiie NaN
Miie NaN
Oree NaN
Rree 10.0
dtype: float64
"""
Series:根据索引来计算 相同可计算,不同则为
NaN
# 6、过滤筛选
sel5 = pd.Series(data=[1,2,6,4],index=list('abcd'))
re = sel5[sel5>3]
"""Result:
c 6
d 4
dtype: int64
"""
[条件]:返回过滤后的值
随机构建
from pandas import DataFrame
import numpy as np
df1 = DataFrame(np.random.randint(0,10,(5,6))) # 随机选择0-10之间的数,(5,6)->(行,列)
"""Result:
0 1 2
0 6 3 3
1 0 4 1
2 1 8 1
"""
传入字典
data = {
'Name' : pd.Series(['zs','ls','we'], index=list('abc')),
'Age' : pd.Series(['10','20','30','40'], index=list('abcd')),
'Country' : pd.Series(['中国','日本','韩国'], index=list('abc'))
}
df2 = DataFrame(data) # 若该列无索引,则会填充NaN
# 将df2转化成字典
new_ditc = df2.to_dict()
""" Result:
df2 Name Age Country
a zs 10 中国
b ls 20 日本
c we 30 韩国
d NaN 40 NaN
new_dict = {'Name': {'a': 'zs', 'b': 'ls', 'c': 'we', 'd': nan}, 'Age': {'a': '10', 'b': '20', 'c': '30', 'd': '40'}, 'Country': {'a': '中国', 'b': '日本', 'c': '韩国', 'd': nan}}
"""
属性
data2 = {
'Name' : ['J','I','A'],
'Age' : ['18','13','20'],
'Country' : ['ua','us','io']
}
df3 = pd.DataFrame(data=data2,index=['1','2','3'])
# 1、获取行数和列数
shape = df3.shape #
"""Result:(3, 3)"""
# 2、获取列 - columns索引
df3.index.tolist()
"""Result:
['1', '2', '3']
而index返回的是:Index(['1', '2', '3'], dtype='object')
"""
# 3、values 键值
values = df3.values
"""Result:返回所有值
[['J' '18' 'ua']
['I' '13' 'us']
['A' '20' 'io']]
"""
# 4、info 返回改数组的信息
info = df3.info()
"""Result:
<class 'pandas.core.frame.DataFrame'>
Index: 3 entries, 1 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Name 3 non-null object
1 Age 3 non-null object
2 Country 3 non-null object
dtypes: object(3)
memory usage: 96.0+ bytes
None
"""
# 5、head(可指定行数) 显示头行
head = df3.head(3)
# 6、tail(行数) 显示后几行
tail = df3.tail()
# 7、获取列 type 返回 Series 获取多列返回 DataFrame [['name','age]]
name = df3['Name']
"""Result:
1 J
2 I
3 A
Name: Name, dtype: object
"""
# 8、Dataframe修改成index、columns
df4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['bj','sh','gz'],columns=['a','b','c'])
index_4 = df4.index # Index(['bj', 'sh', 'gz'], dtype='object') 可被赋值
df4.index = ['beijing','shanghai','guangzhou'] # 对index进行赋值
"""Result:
a b c
beijing 0 1 2
shanghai 3 4 5
guangzhou 6 7 8
"""
# 9、重新命名行和列的俩种方法
def test_map(x):
"""
:param x: 是原有的行列值
:return:
"""
return x+'_new'
rename = df4.rename(index=test_map, columns=test_map) # 将行和列都进行修改
rename_1 = df4.rename(index={'bj':'beijing'},columns={'a':'A'}) # 直接用字典重新赋值
"""
rename = a_new b_new c_new
bj_new 0 1 2
sh_new 3 4 5
gz_new 6 7 8
rename_1 = A b c
beijing 0 1 2
sh 3 4 5
gz 6 7 8
"""
# 10、set_index()的使用:将一组数据作为索引
df5 = pd.DataFrame({'X':range(5),'Y':range(5),'S':list('abcde'),'Z':[1,1,2,2,2]})
result = df5.set_index('S', drop=False) # drop 默认为True将该列的值删除
"""Result:drop=False
X Y S Z
S
a 0 0 a 1
b 1 1 b 1
c 2 2 c 2
d 3 3 d 2
e 4 4 e 2
drop=True
X Y Z
S
a 0 0 1
b 1 1 1
c 2 2 2
d 3 3 2
e 4 4 2
"""