本文按照pandas文档来总结的,如果有错误的地方,欢迎指正
https://pandas.ac.cn/docs/
安装 pandas
导入 pandas
读取表格或数据库
数据库以MySQL为例
支持相对路径,绝对路径,网络路径
读取操作返回DataFrame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import pandas as pd import pymysql
pd.read_csv("data.csv")
pd.read_excel("data.xlsx")
conn = pymysql.connect( host="localhost", port=3306, user="root", password="123456", database="example", charset="utf8" )
sql = "select * from user limit %s,%s" pd.read_sql(sql,con=conn,params=[10,20],index_col=["id","type"])
|
写入表格
1 2 3 4 5 6 7 8 9 10 11 12 13
| import pandas as pd
data_read = pd.read_csv("read.csv")
data_read.to_csv("write.csv",index=False)
data_read.to_csv("write.txt",sep="\t",index=False)
data_read.to_excel("write.xlsx",index=False)
|
选择 DataFrame 的子集
1 2
| import pandas as pd data = pd.read_csv("data.csv")
|
选择数值列
选择特定列
1 2 3 4 5 6 7
| ages = data["Age"] ages.head()
name_age = data[["Name","Age"]] name_age.head()
|
选择特定行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
ages = data[data["Age"] > 35] ages.head()
class_23 = data[data["class"].isin([2,3])]
class_23 = data[(data["class"] == 2) | (data["class"] == 3)] class_23.head()
ages_no_na = data[data["Age"].notna()] ages_no_na.head()
|
选择特定的行和列
需要在选择括号 [] 前面使用 loc/iloc 运算符。使用 loc/iloc 时,逗号前面的部分是要选择的行,逗号后面的部分是要选择的列
loc是基于行标签和列标签进行索引的,基本用法为 DataFrame.loc[行标签,列标签]
iloc是基于行和列的位置进行索引的,索引从0开始,基本用法为 DataFrame.iloc[行位置,列位置]
1 2 3 4 5 6 7
| names = data.loc[data["Age"] > 35,"Name"] names.head()
datas = data.iloc[9,30] datas.head()
|
从现有列创建新列
1 2 3 4 5
| import pandas as pd data = pd.read_csv("data.csv")
data['Age2'] = data['Age'] * 2
|
修改列名称
1 2 3 4 5 6 7 8 9 10 11 12 13
| import pandas as pd data = pd.read_csv("data.csv")
data.rename( columns={ "现有列名称":"新名称", "Age":"年龄", "name":"姓名" } )
data.rename(columns=str.lower)
|
计算汇总统计量
1 2
| import pandas as pd data = pd.read_csv("data.csv")
|
平均值
中位数
特定组合
1 2 3 4 5 6
| data.agg( { "Age": ["min","max","median","skew"], "Fare": ["min","max","median","mean"] } )
|
按类别分组的汇总统计量
1、男性和女性泰坦尼克号乘客的平均年龄是多少?
1 2 3 4 5 6 7 8
| data[['Sex','Age']].groupby("Sex").mean()
data.groupby("Sex").mean(numeric_only=True)
data.groupby("Sex")['Age'].mean()
|
2、每个性别和客舱等级组合的平均票价是多少?
1
| data.groupby(["Sex","Pclass"])['Fare'].mean()
|
按类别统计记录数
1、每个客舱等级有多少乘客?
1 2 3 4 5 6 7
|
data['Pclass'].value_counts() data.groupby("Pclass")['Pclass'].count()
data.groupby("Pclass")['Pclass'].size()
|
排序
1 2 3 4 5 6 7 8 9 10
|
titanic.sort_values(by="Age").head()
|
数据重塑
透视表
在 pivot() 的情况下,数据只是重新排列。当需要聚合多个值时,可以使用 pivot_table(),它提供一个聚合函数(例如平均值)来组合这些值。
1
| data.pivot_table(values="value", index="location", columns="parameter", aggfunc="mean")
|
创建新索引
reset_index()
1
| data.pivot(columns="location", values="value").reset_index()
|
合并
1 2 3
| data1 = pd.read_csv("data1.csv") data2 = pd.read_csv("data2.csv") pd.concat([data1,data2],axis=0)
|
merge
基本用法: merge(left,right,how,on,left_on,right_on,left_index,right_index,sort,suffixes,copy,indicator,validate)
详细解释见: https://pandas.pydata.org/docs/reference/api/pandas.merge.html#pandas.merge
时间序列数据
1
| pd.to_datetime(data["datetime"])
|
操作文本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| data['Name'].str.lower
data['Name'].str.split(",")
data['Name'].str.contains("Countess")
data['Name'].str.len()
data.loc[data['Name'].str.idxmax(),"Name"]
data['Name'].replace({"male": "M", "female": "F"})
|