Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。
Pandas 适用于处理以下类型的数据:
Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy 开发,可以与其它第三方科学计算支持库完美集成。
Pandas 就像一把万能瑞士军刀,下面仅列出了它的部分优势 :
这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。
其它说明:
# coding:utf-8
import numpy as np
import pandas as pd
def init():
df = pd.DataFrame(np.array([[1,2],[3,4],[5,6],[7,8]]),columns=['A','B'],index=[3,4,5,6])
return df
1 创建数据
def create_data():
# 1.1使用列表创建序列
s1 = pd.Series([1,2,3,4,5])
print("s1内容:\n",s1)
print("s1索引:\n",s1.index)
print("s1值:\n",s1.values)
#s1内容:
#0 1
#1 2
#2 3
#3 4
#4 5
#dtype: int64
#s1索引:
#RangeIndex(start=0, stop=5, step=1)
#s1值:
#[1 2 3 4 5]
#1.2由字典创建序列
dic = {"A":1,"B":2,"C":3,"D":4,"E":5}
s2 = pd.Series(dic,index=["A","C","E"])
print("s2:\n",s2)
#s2:
#A 1
#C 3
#E 5
#dtype: int64
#1.3 通过序列创建DataFrame
df1 = pd.DataFrame(s1,columns=["number"]) #指定列名
print("DataFrame1:\n",df1)
#DataFrame1:
#number
#0 1
#1 2
#2 3
#3 4
#4 5
#1.4通过序列对象产生DataFrame
df2 = pd.DataFrame({'A':1,'B':s1,'C':pd.Timestamp('20201208'),'D':'hello'})
print("DataFrame2:\n",df2)
#DataFrame2:
# A B C D
#0 1 1 2020-12-08 hello
#1 1 2 2020-12-08 hello
#2 1 3 2020-12-08 hello
#3 1 4 2020-12-08 hello
#4 1 5 2020-12-08 hello
#1.5通过numpy产生DataFrame
df3 = pd.DataFrame(np.array([[1,2],[3,4],[5,6],[7,8]]),columns=['A','B'],index=[3,4,5,6])
print("DataFrame3:\n",df3)
#DataFrame3:
#A B
#3 1 2
#4 3 4
#5 5 6
#6 7 8
2显示数据
def view_data(df):
print("DataFrame:概要信息\n",df.describe())
print("DataFrame:头部\n",df.head())
print("DataFrame 尾部:\n",df.tail(2))
print("DataFrame 索引:\n",df.index)
print("DataFrame 列名:\n",df.columns)
DataFrame:概要信息
A B
count 4.000000 4.000000
mean 4.000000 5.000000
std 2.581989 2.581989
min 1.000000 2.000000
25% 2.500000 3.500000
50% 4.000000 5.000000
75% 5.500000 6.500000
max 7.000000 8.000000
DataFrame:头部
A B
3 1 2
4 3 4
5 5 6
6 7 8
DataFrame 尾部:
A B
5 5 6
6 7 8
DataFrame 索引:
Int64Index([3, 4, 5, 6], dtype='int64')
DataFrame 列名:
Index(['A', 'B'], dtype='object')
3 排序数据
def sort_df(df):
print("按轴排序:\n",df.sort_index(axis=1,ascending=False))
print("按值排序:\n",df.sort_values(by='B',ascending=False))
按轴排序:
B A
3 2 1
4 4 3
5 6 5
6 8 7
按值排序:
A B
6 7 8
5 5 6
4 3 4
3 1 2
sort_values
4 获得值
def get_value(df):
print("原数据:\n",df)
print("按列获取内容:\n",df['A'])
print("切片操作:\n",df[0:3])
print("基于行列标签获取数据(loc):\n",df.loc[:4,:'C'])
print("基于行列索引获取数据(iloc):\n",df.iloc[:2,:2])
原数据:
A B
3 1 2
4 3 4
5 5 6
6 7 8
按列获取内容(仅获取A列):
3 1
4 3
5 5
6 7
Name: A, dtype:int32
切片操作:
A B
3 1 2
4 3 4
5 5 6
基于行列标签获取数据(loc):
A B
3 1 2
4 3 4
基于行列索引获取数据(iloc):
A B
3 1 2
4 3 4
5 数据操作
def data_oper(df):
print("原数据:\n",df)
print("每个字均+1:\n",df.add(1))
print("数据每一列均值:\n",df.mean())
print("数据每一行均值:\n",df.mean(1))
print("apply函数:\n",df.apply(lambda x:x.max()-x.min()))
原数据:
A B
3 1 2
4 3 4
5 5 6
6 7 8
每个字均+1:
A B
3 2 3
4 4 5
5 6 7
6 8 9
数据每一列均值:
A 4.0
B 5.0
dtype: float64
数据每一行均值:
3 1.5
4 3.5
5 5.5
6 7.5
dtype: float64
apply函数:
A 6
B 6
6 文件操作
def load_file():
data = pd.read_csv('my.csv')
print("my.csv:\n",data)
data.to_csv('my.csv',index=False)
#index=False 不把索引写进文件中
data = pd.read_excel('my.xlsx','Sheet1')
print("my.xlsx:\n",data)
#pip3 install openpyxl
data.to_excel('my.xlsx',sheet_name='Sheet1',index=False)
if __name__=="__main__":
df = init()
create_data()
view_data(df)
sort_df(df)
get_value(df)
data_oper(df)
load_file()