pandas 使用目录

目录不能折叠,想找什么,直接用‘搜索’找你想知道的点吧

关注公众号“木下学Python”可以找到我要 pandas 笔记的原文件哦

 

目录

# # Series 一维类型

# ## 创建一个 Series

# ### 传入一个列表

# ### 指定索引传入

# ### 传入一个字典

# ## 利用 index 方法获取 Series 的索引

# ## 利用 values 方法获取 Series 的值

# # DataFrame 表格型数据结构

# ## 创建一个DataFrame

# ### 传入一个列表

 

# ### 传入一个嵌套列表

# ### 指定行、索引列(index、columns)

 

# 设置索引列

# 设置行索引

# 行列索引同时设置

# ### 传入一个字典

# key 是列索引,还可设置行索引

 

# ### 获取 DataFrame 行。列索引

# 获取列索引

# 获取行索引

# # 导入外部数据

# ## 导入 .xlsx 文件

# ### 基本导入

# read_excel 导入

# ### 指定导入哪个 Sheet (sheet_name)

# sheet_name 指定导入哪个 Sheet 文件,不指定默认第一个

 

# 还可以指定传入 Sheet 顺序,从 0 开始

# ### 指定行索引 (index_col)

# 默认从 0 开始,index_col 来设置

# ### 指定列索引 (header)

 

# 默认从 0 开始,header 来设置

# 第一行作为索引

# 第二行作为索引

# 默认从 0 开始的数作为列索引

# ### 指定导入列(usecols)

 

# 指定从第 0 列 导入到第几列

 

# 以列表形式,指定导入哪些列

# ## 导入 .csv 文件

# ### 直接导入

 

# ### 指明分割符号 (sep)

# ### 指明读取行数(nrows)

# ### 指定编码格式 (encoding)

# ### 当文件路径或文件名包含中文报错时 (engine)

# 如果文件格式时 CSV UTF-8(逗号分割)(*.csv),编码设置为 utf-8-sig

# 如果文件格式时 CSV(逗号分割)(*.csv),编码设置为 gbk

# ### 行列索引,导入某行某列

# # 导入 .txt 文件(read_table)

# 可以导 .txt,还可以导 .csv

# 导入 .csv,即使是逗号分割的,也要用 sep 指明分割符号

# 其他参数与 read_csv() 的基本一样

# # 导入 sql 文件

# 创建连接

# 导入

# # 熟悉数据

# ## 利用 head 浏览前几行

# ## 利用 shape 获取数据表有几行几列

# ## 利用 info 获取数据类型

# ## 利用 describe 获取数字分布情况

# 调用是只计算数值类型

# # 数据预处理

# ## 缺失值查看(isnull())

# NaN 表示缺失值

# 是缺失值返回 True

# ## 删除缺失值(dropna())

 

# 删除整行,只要有缺失值,就删除整行

# 如果只向删除全部是空白的行,传入一个参数 how='all' 即可


# # Series 一维类型

# ## 创建一个 Series

# ### 传入一个列表

 

# In[5]:


 

import pandas as pd


 

S1 = pd.Series(['a','b','c','d'])

print(S1)


 

# ### 指定索引传入

#

 

# In[10]:


 

S2 = pd.Series([1,2,3,4],index=['a','b','c','d'])

print(S2)


 

# ### 传入一个字典

 

# In[11]:


 

S3 = pd.Series({'a':1,'b':2,'c':3,'d':4})

print(S3)


 

# ## 利用 index 方法获取 Series 的索引

 

# In[12]:


 

print(S1.index)

print(S2.index)

print(S3.index)


 

# ## 利用 values 方法获取 Series 的值

 

# In[13]:


 

print(S1.values)

print(S2.values)

print(S3.values)


 

# # DataFrame 表格型数据结构

 

# ## 创建一个DataFrame

# ### 传入一个列表

 

# In[14]:


 

df1 = pd.DataFrame(['a','b','c','d'])

print(df1)


 

# ### 传入一个嵌套列表

 

# In[7]:


 

# 列表中的列表可以换成元组,里面有几个元素就代表有几列

df2 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']])

print(df2)


 

# ### 指定行、索引列(index、columns)

 

# In[22]:


 

# 设置索引列

df31 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],columns=['小写','大写'])

print(df31)


 

# In[24]:


 

# 设置行索引

df32 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],index=['一','二','三','四'])

print(df32)


 

# In[9]:


 

# 行列索引同时设置

df33 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],index=['一','二','三','四'],columns=['小写','大写'])

print(df33)


 

# ### 传入一个字典

 

# In[11]:


 

# key 是列索引,还可设置行索引

data = {'小写':['a','b','c','d'],'大写':['A','B','C','D']}

df41 = pd.DataFrame(data,index=['一','二','三','四'])

print(df41)


 

# ### 获取 DataFrame 行。列索引

 

# In[10]:


 

# 获取列索引

print(df2.columns)

print(df33.columns)

 

# 获取行索引

print(df2.index)

print(df33.index)


 

# # 导入外部数据

# ## 导入 .xlsx 文件

# ### 基本导入

 

# In[15]:


 

# read_excel 导入

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df)


 

# ### 指定导入哪个 Sheet (sheet_name)

 

# In[17]:


 

# sheet_name 指定导入哪个 Sheet 文件,不指定默认第一个

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name='Sheet2')

print(df)

 

# 还可以指定传入 Sheet 顺序,从 0 开始

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name=0)

print(df)


 

# ### 指定行索引 (index_col)

 

# In[22]:


 

# 默认从 0 开始,index_col 来设置

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name=0,index_col=1)

print(df)


 

# ### 指定列索引 (header)

 

# In[26]:


 

# 默认从 0 开始,header 来设置

# 第一行作为索引

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name=0,header=0)

print(df)

 

# 第二行作为索引

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name=0,header=1)

print(df)

 

# 默认从 0 开始的数作为列索引

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',sheet_name=0,header=None)

print(df)


 

# ### 指定导入列(usecols)

 

# In[54]:


 

# 指定从第 0 列 导入到第几列

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',usecols=0)

print(df)

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',usecols=1)

print(df)

 

# 以列表形式,指定导入哪些列

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx',usecols=[3])

print(df)


 

# ## 导入 .csv 文件

 

# ### 直接导入

 

# In[56]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\手表.csv')

print(df)


 

# ### 指明分割符号 (sep)

 

# In[60]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\手表.csv',sep=',')

print(df)


 

# ### 指明读取行数(nrows)

 

# In[62]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\手表.csv',sep=',',nrows=2)

print(df)


 

# ### 指定编码格式 (encoding)

 

# In[64]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\手表.csv',encoding='utf-8')

print(df)


 

# ### 当文件路径或文件名包含中文报错时 (engine)

 

# In[65]:


 

# 如果文件格式时 CSV UTF-8(逗号分割)(*.csv),编码设置为 utf-8-sig

# 如果文件格式时 CSV(逗号分割)(*.csv),编码设置为 gbk


 

# ### 行列索引,导入某行某列

 

# In[66]:


 

# 与导入 .xlsx 文件一致


 

# # 导入 .txt 文件(read_table)

 

# In[73]:


 

# 可以导 .txt,还可以导 .csv

# 导入 .csv,即使是逗号分割的,也要用 sep 指明分割符号

# 其他参数与 read_csv() 的基本一样

df1 = pd.read_table(r'C:\Users\13479\Desktop\python项目\pygame\入门代码\read.txt',sep=' ',encoding='gbk')

print(df1)

 

df1 = pd.read_table(r'C:\Users\13479\Desktop\python项目\Excel数据\手表.csv',encoding='utf-8')

print(df1)


 

# # 导入 sql 文件

 

# In[85]:


 

import pymysql


 

# 创建连接

cli = pymysql.connect(host='localhost',user='user',password='passwd',db='db',charset='utf8')

 

# 导入

df = pd.read_sqsl(sql,cli)


 

# # 熟悉数据

 

# ## 利用 head 浏览前几行

 

# In[90]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head()) # 默认显示前 5 行

print(df.head(2)) # 只展示前 2 行


 

# ## 利用 shape 获取数据表有几行几列

 

# In[92]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.shape)


 

# ## 利用 info 获取数据类型

 

# In[94]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.info())


 

# ## 利用 describe 获取数字分布情况

 

# In[4]:


 

# 调用是只计算数值类型

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.describe())


 

# # 数据预处理

 

# ## 缺失值查看(isnull())

 

# In[8]:


 

# NaN 表示缺失值

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df)

 

# 是缺失值返回 True

print(df.isnull())


 

# ## 删除缺失值(dropna())

 

# In[10]:


 

# 删除整行,只要有缺失值,就删除整行

# 如果只向删除全部是空白的行,传入一个参数 how='all' 即可

print(df.dropna())


 

# ## 缺失值填充(fillna())

 

# In[32]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df)

 

print(df.fillna(0))

 

# 也可以按不同列填充,指明列名即可

print(df.fillna({'英文':1}))

 

# 还可以指明多个列

print(df.fillna({'英文':1,123:2}))


 

# ## 重复值处理 (drop_duplicates())

 

# In[36]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df)

 

# 删除所有重复的行,只保留第一个

print(df.drop_duplicates())

 

# 以某一列为删除的字段,判断字段中的重复数据,重复就删掉,不管其他列一不一样

print(df.drop_duplicates(subset=123))

 

# 也可以按多列去重 subset 以列表即可

print(df.drop_duplicates(subset=[123,'英文']))

 

# 还可以指定保留第几个,第一个,去后一个,还是全部删,last 最后一个,first 第一个,False 全部删除

print(df.drop_duplicates(subset=[123,'英文'],keep='last'))


 

# ## 数据类型

 

# ### 查看类型(dtype)

 

# In[38]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df[123].dtype)


 

# ### 类型转换(astype())

 

# In[41]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df[123].dtype)

 

print(df[123].astype('float64'))


 

# ## 索引设置

# ### 为无索引表添加索引(columns)

 

# In[45]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

df.columns=['z','j','k','l']

print(df)


 

# ### 重新设置索引(set_index())

 

# In[47]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

print(df.set_index(123))


 

# ### 重置索引(reset_index())

 

# In[49]:


 

df = pd.read_excel(r'C:\Users\13479\Desktop\python项目\Excel数据\letter.xlsx')

df = df.set_index(123)

print(df)

 

# level 指定要将层次化索引的第几级别转化为 columns,爱一个索引为 0 级,第二个索引为 1 级,默认全部把索引转换为 columns

print(df.reset_index())

 

# drop 指定是否将原索引删掉,即不作为一个新的 colnmus,默认为 False,即不删除原索引

print(df.reset_index(level=0))

 

# inplace 用来指定是否修改元数据


 

# # 数据选择

 

# ## 列选择

 

# ### 选择某一列,某几列(iloc)

 

# In[73]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

 

# 选择一列,通过列名

print(df['姓名'].head())

 

# 选择多列,要用列表括起来,通过列名

print(df[['姓名','客观分']].head())

 

# 通过索引序号,逗号前面表示要显示几行,逗号后面表示要选择的列

print(df.iloc[:5,[0,3]])


 

# ### 选择连续的某几列

 

# In[75]:


 

print(df.iloc[:,0:3])


 

# ## 行选择

 

# ### 选择某一行,某几行(loc,iloc)

 

# In[96]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head())

 

# 选择第一行

print(df.loc[0])

 

# 选择第一行和第二行

print(df.loc[[0,1]])

 

# 选择第一行

print(df.iloc[0])

 

# 选择第一行和第二行

print(df.iloc[[0,1]])


 

# ### 选择连续某几行

 

# In[98]:


 

# 选择第一道第三方

print(df.iloc[0:3])


 

# ### 选择满足条件的行

 

# In[104]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head())

 

# 选择“客观分”这一列大于 30 的行

print(df[df['客观分']>30].head())

 

# 选择“客观分”这一列大于 30 的行,"主观分" 大于 70 的行

print(df[(df['客观分'] > 30) & (df['主观分'] > 70)].head())


 

# ## 行列同时选择

 

# ### 普通索引(loc)

 

# In[106]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.loc[[0,1],['姓名','客观分']])


 

# ### 位置索引(iloc)

 

# In[112]:


 

# 第一个列表选定指定行,第二个列表选定指定列

print(df.iloc[[0,2],[0,2]])


 

# ### 布尔索引 + 普通索引

 

# In[115]:


 

# 选定“客观分大于 30”,选定“姓名,客观分”这两列

print(df[df['客观分']>30][['姓名','客观分']].head())


 

# ### 切片索引 + 切片索引

 

# In[118]:


 

# 选定第一行到第二行,第二列到第三列

print(df.iloc[0:3,1:3].head())


 

# ### 切片索引 + 普通索引(ix)

 

# In[121]:


 

# 行(列)用切片,列(行)用普通

# 选择第一行到第三方,“客观分,主观分”这两列

print(df.ix[0:2,['主观分','客观分']].head())


 

# # 数值操作

 

# ## 数值替换

# ### 一对一替换(replace())

 

# In[128]:


 

import numpy as np

 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

 

# “客观分”55 的替换成 60

print(df['客观分'].replace(55,60).head())

 

# 对缺失值进行替换,np.NaN 是表示缺失值的

print(df.replace(np.NaN,0))


 

# ### 多对一替换

 

# In[131]:


 

# 将 70,55 替换成 40

print(df.replace([70,55],40).head())


 

# ### 多对多替换

 

# In[133]:


 

# replace({'A','a','B','b'})

print(df.replace({40:1,50:1}).head())


 

# ## 数值排序(sort_values)

 

# ### 以某一列为准进行排序或升序(ascending)

 

# In[136]:


 

# 以“主观分”进行降序排列,默认升序,

print(df.sort_values(by=['主观分'],ascending=False).head())


 

# ### 按照有缺失值的列进行排序(na_position)

 

# In[ ]:


 

# 有 last,first 默认是排在最后

print(df.sort_values(by=['客观分'],na_position='last').head())


 

# ### 按多列数值排序

 

# In[146]:


 

# 但第一列出现重复的,按照第二列去排列

print(df.sort_values(by=['客观分','主观分'],ascending=[True,False]).head())


 

# ## 数值排名(rank())

 

# In[10]:


 

# 参数1:ascending 默认升序排列

# 参数2:method ,可取 average,first,min,max

# average:当待排名的数值有重复字时,返回重复值的平均排名

# first:按值在所有的待排列数据中出现的先后顺序排名

# min:待待排名数值有重复时,返回重复值的最佳排名

# max:取重复值对应的最大排名

 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df['客观分'].head(10))

 

# average

print(df['客观分'].rank(ascending=True,method='average').head(10))

 

# first

print(df['客观分'].rank(ascending=True,method='first').head(10))

 

# min

print(df['客观分'].rank(ascending=True,method='min').head(10))

 

# max

print(df['客观分'].rank(ascending=True,method='max').head(10))


 

# ## 数值删除(drop())

 

# ### 删除列

 

# In[33]:


 

# 需要参数 axis,并让其等于 1,

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head())

 

print(df.drop(['客观分','主观分'],axis=1).head())

 

# 可以以列名传入就不需 axis 了,删除姓名列

print(df.drop(columns=['姓名']).head())

 

# 还可以在传入待删除列的位置,删除第一第二列

print(df.drop(df.columns[[0,1]],axis=1).head())


 

# ### 删除行

 

# In[39]:


 

# 需要参数 axis,并让其等于 0

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head())

 

# 删除行索引名称为 0,1 的

print(df.drop([0,2],axis=0).head())

 

# 传入待删除的索引行号,删除第 0,3 行

print(df.drop(df.index[[0,3]],axis=0).head())

 

# 也可以将待删除行的行名传给 index,就不需要 axis 了

print(df.drop(index=[0,4]).head())


 

# ### 删除特定行

 

# In[42]:


 

# 加入要删除分数小于 30 的,是找出相反的,大于 30 的

print(df[df['客观分']>30].head())


 

# ## 数值计算(value_counts())

 

# In[16]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

 

# 第一列是要计算的数,第二列是出现次数

print(df['客观分'].value_counts().head())

 

# 还可以看每个值出现的占比,normalize

print(df['客观分'].value_counts(normalize=True).head())

 

# 可以按数值的降序排列,sort

print(df['客观分'].value_counts(normalize=True,sort=False).head())


 

# ## 获取唯一值(unique())

 

# In[21]:


 

# 获取“主观分”的唯一值

print(df['主观分'].unique())


 

# ## 数值查找(isin())

 

# In[24]:


 

# 选择这一列,看这一列中是否包含某个值,包含返回 True,否则返回 False

print(df.head())

 

print(df['客观分'].isin([70,55]).head())


 

# ## 区间切分(cut()、qcut())

 

# In[27]:


 

# bins 用来指明切分区间

# 把“客观分”分成 0 < x <=20 20 < x <=40 40 < x <= 60

print(pd.cut(df['客观分'],bins=[0,20,40,60]))

 

# qcut 不需要事先指明切分区间,只需要指明切分个数,即分成几份,原则每个组数据尽可能相等

# 将数据分成 3 份

print(pd.qcut(df['客观分'],3))


 

# ## 插入新的行和列(insert())

 

# In[29]:


 

# 插入行是两个表拼接

# 插入列用 insert() 括号中指明要插入的位置,插入后新的列名,以及要插入的数据

# 注意插入的值要跟表格的数据量一致

print(df.insert(3,'总分',[5,6,5,234,8]))

 

# 还可以直接以索引的方式进行插入

df['总分'] = [4,342,54,345,13]


 

# ## 行列互换(装置)(.T)

 

# In[32]:


 

print(df.head())

 

print(df.T.head())


 

# ## 表格重塑(stack、unstack)

 

# In[37]:


 

print(df.head())

 

# 表格转为树状

print(df.stack().head())

 

# 树状转表格

print(df.unstack().head())


 

# ## 长宽表转换

# ### 宽表转长表(stack(),melt())

 

# In[45]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\宽表.csv',encoding='gbk')

print(df)

# 宽转长,需要有公共列

# Stack() 实现

# 将不变的列设置成索引

print(df.set_index(['company','name']))

# 列索引转换为行索引

print(df.set_index(['company','name']).stack())

 

# 索引重置

print(df.set_index(['company','name']).stack().reset_index())


 

# melt() 实现

# id_vars:用于指明转换时不变的列

# var_name:列索引转换为行索引后的列名

# value_name:新索引对应的值列名

print(df.melt(id_vars=['name','company'],var_name='year',value_name='sale'))


 

# ### 长表转换为宽表(pivot_table)

 

# In[50]:


 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\宽表.csv',encoding='gbk')

df = df.melt(id_vars=['name','company'],var_name='year',value_name='sale')

print(df)

 

# year 为索引列,values 为 值,不变的是 company,name

print(df.pivot_table(index=['company','name'],columns='year',values='sale'))


 

# ## apply()、applymap() 函数

 

# In[53]:


 

# 需要与匿名函数 lambda 结合使用,对一个序列中的所有元素执行相同的操作

 

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\成绩分析.csv',encoding='gbk')

print(df.head())

 

# apply()

# 将客观分每一个元素加一

print(df['客观分'].apply(lambda x:x + 1).head())

 

# applymap()

# 每一个元素执行相同的操作,但要是数字类型

print(df.applymap(lambda x:x + 1).head())


 

# # 数据运算

 

# ## 算术运算(加减乘除)

 

# In[12]:


 

# 必须是数字类型

import pandas as pd

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\23.csv',encoding='gbk')

print(df)

 

# 两列相加

print(df['c1'] + df['c2'])

 

# 两列相减

print(df['c1'] - df['c2'])

 

# 两列相乘

print(df['c1'] * df['c2'])

 

# 两列相处

print(df['c1'] / df['c2'])

 

# 任意一列加/减/乘/除一个常数值,这一列所有值都加/减这个常数值

print(df['c1'] - 2)


 

# ## 比较运算

 

# In[15]:


 

print(df['c1'] > df['c2'])

 

print(df['c1'] != df['c2'])

 

print(df['c1'] < df['c2'])


 

# ## 汇总运算

# ### count 非空值计数

 

# In[19]:


 

# 返回数据表中每列的非空值的个数

print(df)

print(df.count())

 

# axis 设置每一行的非空数值的个数

print(df.count(axis=1))

 

# 可以把每一列或每一行单独索引出来,单独查看这一列的非空值个数

print(df['c1'].count())


 

# ### sum 求和

 

# In[23]:


 

# 返回每一列的求和结果

print(df.sum())

 

# axis 指定等于 1,来求每一行的数值进行求和

print(df.sum(axis=1))

 

# 可指定某一列或某一行

print(df['c1'].sum())


 

# ### mean 求平均值

 

# In[28]:


 

print(df)

 

# 计算每一列的均值

print(df.mean())

 

# axis 参数计算每一行的均值

print(df.mean(axis=1))

 

# 单独求某一列或某一行的均值

print(df['c1'].mean())


 

# ### max 求最大值

 

# In[30]:


 

print(df)

 

# 求每一列最大值

print(df.max())

 

# 求每一行最大值,axis

print(df.max(axis=1))

 

# 求单独的一行或一列的最大值

print(df['c1'].max())


 

# ### min 求最小值

 

# In[32]:


 

# 与 max 一样


 

# ### median 求中位数

 

# In[33]:


 

# 从小到大排列,找出中间数

# 与 min 函数一样


 

# ### mode 求众数

 

# In[35]:


 

# 与 median 一样


 

# ### std 求标准差

 

# In[37]:


 

# 与 mode 一样


 

# ### var 求反差

 

# In[ ]:


 

# 与 std 一样


 

# ### quantile 求分位数

 

# In[41]:


 

# 主在这个区域内的范围,要有四分之一位数,四分之二位数,四分之三位数,而四分之二位数就是中位数

print(df)

 

# 对整个表求四分之一位数

print(df.quantile(0.25))

 

# 其他与 var 一样


 

# ## 相关性运算(corr())

 

# In[46]:


 

# 就是计算相关系数

print(df)

 

# 计算 c1 c2 相关的系数

print(df['c1'].corr(df['c2']))

 

# 计算所有字段两两之间的相关性

print(df.corr())


 

# # 时间序列

# ## 获取当前时刻的时间

# ### 返回当前时刻的日期和时间(now())

 

# In[5]:


 

from datetime import datetime

print(datetime.now())


 

# ### 返回当前时刻的年、月、日

 

# In[7]:


 

print(datetime.now().year)

print(datetime.now().month)

print(datetime.now().day)


 

# ### 返回当前时刻的周数(weekday()、isocalendar())

 

# In[ ]:


 

# python 是从 0 开始计数,所以加一

# 返回星期几

print(datetime.now().weekday() + 1)

 

# 返回这一年中的是是第几周

print(datetime.now().isocalendar())

print(datetime.now().isocalendar()[1])


 

# ## 指定日期和时间的格式(date()、strftime())

 

# In[15]:


 

# 只展示日期

print(datetime.now().date())

 

# 只展示时间

print(datetime.now().time())

 

# strftime() 自定义时间和日期的格式

# %H:小时【00,23】

# %I:小时【01,12】

# %M: 两位数的分【00,59】

# %S: 秒【00,61】(60 和 61 用于闰秒)

# %w: 用整数表示星期几,从 0 开始

# %U:每年的第几周,周日被认定为每周的第一天

# %W:每年的第几周,周一被认定为每周的第一天

# %F:%Y-%m-%d 的简写形式,如 2018-9-8

# %D:%m%d%y 的简写形式,如 04/5/2019

 

print(datetime.now().strftime('%Y-%m-%d'))

print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))


 

# ## 字符串和时间格式相互转换(str()、parse())

# ### 将时间格式转换为字符串格式

 

# In[17]:


 

now = datetime.now()

print(type(now))

print(type(str(now)))


 

# ### 将字符串格式转换为时间格式

 

# In[ ]:


 

# str_time = '2019-8-27'

print(type(str_time))

 

from dateutil.parser import parse

print(parse(str_time))

print(type(parse(str_time)))


 

# ## 时间索引(DatetimeIndex())

 

# In[ ]:


 

# 新建一个时间索引的 DataFrame

import pandas as pd

import numpy as np

index = pd.DatetimeIndex(['2019-01-01','2019-03-04','2019-04-05','2019-05-09'])

data = pd.DataFrame(np.arange(1,5),columns=['num'],index=index)

print(index)

 

# 获取 2019 数据

print(data['2019'])

 

# 获取 2019 1 月数据

print(data['2019-01'])

 

# 获取 2019 1 月到 5 月的数据

print(data['2019-01':'2019-03'])


 

# ## 时间运算

# ### 两个时间之差

 

# In[40]:


 

# 差返回的包含天数、秒、微秒三个等级

cha = datetime(2019,8,27,12,59) - datetime(2019,8,25,1,59)

 

# 差值为 11 小时,0 分,0 秒

print(cha)

 

# 返回天的时间差

print(cha.days)

 

# 返回秒的时间差

print(cha.seconds)

 

# 换算成小时的时间差

print(cha.seconds / 3600)


 

# ### 时间偏移(timedelta、date offset)

 

# In[54]:


 

# 给时间往前或往后推一段时间

 

# timedelta 只支持天、微秒、秒单位的时间运算

from datetime import timedelta

date = datetime(2019,8,27,20,30,30,30)

 

# 往后推一天

print(date + timedelta(days=1))

 

# 往后推 60 秒

print(date + timedelta(seconds=60))

 

# 往前推一天

print(date - timedelta(days=1))

 

# 往前推 60 秒

print(date - timedelta(days=1))


 

# date offset 天、小时、分钟的偏移

from pandas.tseries.offsets import Day,Hour,Minute

date = datetime(2019,8,27,20,30,30,30)

 

# 往后推一天

print(date + Day(1))

 

# 往后推 10 分钟

print(date + Minute(10))

 

# 往前推一天

print(date - Day(1))

 

# 往前推一小时

print(date - Hour(1))

 

# 往前推 10 分钟

print(date - Minute(10))


 

# # 数据分组/数据透视表

# ## 数据分组(groupby())

# ### 分组键是列名

 

# In[ ]:


 

# 分组后的数据进行汇总运算的操作称为聚合

 

import pandas as pd

df = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df.csv',encoding='gbk')

print(df)

 

# 按照一列进行分组

print(df.groupby('分类'))

 

# 需要汇总计算后才会展现出来

print(df.groupby('分类').count())

 

# 按照多列进行分组

print(df.groupby(['分类','区域']).count())


 

# ### 分组键是 Series

 

# In[65]:


 

# 把某一列取出来,这一列就是一个 Series

 

# 按照一个 Series 进行分组

print(df.groupby(df['分类']).count())

 

# 按照多个 Series 进行分组

print(df.groupby([df['分类'],df['区域']]).count())

 

# 分组后对某些列进行汇总计算

print(df.groupby(df['分类'])['区域'].count())


 

# ### aggregate()

 

# In[ ]:


 

# 一次可以使用多种汇总方式

 

# 以“分类”为组,计数,汇总

print(df.groupby('分类').aggregate(['count','sum']))

 

# 让不同的列做不同的汇总

print(df.groupby('分类').aggregate({'分类':'count','区域':'sum'}))


 

# ### 对分组后的结果重置索引

 

# In[72]:


 

# 经过汇总运算后的形式不是标准的 DataFrame 形式

print(df.groupby('分类').sum())

print(df.groupby('分类').sum().reset_index())


 

# ## 数据透视表(pivot_table())

 

# In[87]:


 

# pd.pivot_table(data,values=None,index=None,colnmus=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All')

# data 表示要做数据透视表的整个表(加上会报错)

# values 对应 excel 中值那个框

# index 对应 excel 中行那个框

# colnmus 对应 excel 中列那个框

# aggfunc 表示对 values 的计算类型

# fill_value 表示对空值的填充值

# margins 表示是否显示合计列

# droppna 表示是否删除缺失,如果为真时,则把一整行全作为缺失值删除

# margins_name 表示合计列的列名

 

# “分类”作为 index,“区域”作为 columns,‘7月’作为values,对 values 执行 count 运算

print(df.pivot_table(values='7月',columns='区域',index='分类',aggfunc='count',margins=True))

 

# 合计列的名称默认为 All,修改 margins_name

print(df.pivot_table(values='7月',columns='区域',index='分类',aggfunc='count',margins=True,margins_name='总计'))

 

# NaN 表示缺失值,fill_value 进行填充

print(df.pivot_table(values='7月',columns='区域',index='分类',aggfunc='count',margins=True,margins_name='总计',fill_value=0))

 

# aggfunc 传入一种类型,表示对所有值字段进行同样的计算量,对不同类型不同计算,需要传入字典

print(df.pivot_table(values=['7月','8月'],columns='区域',index='分类',aggfunc={'7月':'count','8月':'sum'}))

 

# 为了便于处理分析,一般都会对数据透视表的结果重置索引 reset_index()


 

# # 多表拼接

# ## 表的横向拼接(merge())

# ### 连接表的类型

 

# In[93]:


 

df1 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df1.csv',encoding='gbk')

df2 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df2.csv',encoding='gbk')

print(df1)

print(df2)

 

# 一对一,每行都有对应,公共列是一对一

print(pd.merge(df1,df2))

 

# 多对一,公共列有重复值

print(pd.merge(df1,df2,on='学号'))

 

# 多对多,公共列不是一对一,且两个表列都有重复值

print(pd.merge(df1,df2))


 

# ### 连接键的类型(on)

 

# In[96]:


 

# 没有 on 默认是以公共列,有 on 一般也指他们的公共列,指明多个公共列时,用列表括起来

df1 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df1.csv',encoding='gbk')

df2 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df2.csv',encoding='gbk')

 

# 分别指明左右连接键

# 实际值一样,但列名不同,就要指定左表和右表的键了

print(df1)

print(df2)

print(pd.merge(df1,df2,left_on='编号',right_on='学号'))

 

# 把索引列当做连接键

# left_index right_index

"""

print(pd.merge(df1,df2,left_index=True,right_index=True))

"""

 

# 索引列和普通列混用

"""

print(pd.merge(df1,df2,left_index=True,right_on='学号'))

"""


 

# ### 连接方式(how)

 

# In[102]:


 

# 右边公共列的值在左表对应的公共列找不到

df1 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df1.csv',encoding='gbk')

df2 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df2.csv',encoding='gbk')

print(df1)

print(df2)

 

# 内连接(inner)去两个表的公共部分

print(pd.merge(df1,df2,on='学号',how='inner'))

 

# 左连接(left)左表为基础,右表接过来,右表没有的就用 NaN,多余的就省略

print(pd.merge(df1,df2,on='学号',how='left'))

 

# 右连接跟左连接相反

print(pd.merge(df1,df2,on='学号',how='right'))

 

# 外连接(outer)取两个表的并集

print(pd.merge(df1,df2,on='学号',how='outer'))


 

# ### 重复列名处理(suffixes)

 

# In[103]:


 

# 但选好连接列后,其他列的列名有重复的,会自动添加后缀_x,_y,_z,suffixes 自定义

"""

print(pd.merge(df1,df2,on='学号',how='outer',suffixes=['_L','_R']))

"""


 

# ## 表的纵向拼接(concat())

# 一般场景分离的若干结构相同的数据表合并成一个数据表,跟横向拼接相对应

 

# ### 普通合并

 

# In[105]:


 

print(pd.concat([df1,df2]))


 

# ### 索引设置

 

# In[108]:


 

print(pd.concat([df1,df2],ignore_index=True))


 

# ### 重叠数据合并

 

# In[110]:


 

# 可能合并后有重复数据出现,就这样处理

print(pd.concat([df1,df2],ignore_index=True).drop_duplicates())


 

# # 结果导出

 

# ## 导出为 .xlsx 文件(to_excel())

 

# ### 设置文件导出路径(excel_writer)

 

# In[6]:


 

import pandas as pd

df1 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df1.csv',encoding='gbk')

df2 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df2.csv',encoding='gbk')

df3 = pd.merge(df1,df2,on='学号',how='inner')

print(df3)

 

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk'))


 

# ### 设置 Sheet 名称(sheet_name)

 

# In[8]:


 

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk',sheet_name='test'))


 

# ### 设置索引(index)

 

# In[10]:


 

# 保存的文件的索引默认是从 0 开始,导出是把这种索引去掉

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk',sheet_name='test',index=False))


 

# ### 设置要导出的列(columns)

 

# In[12]:


 

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk',sheet_name='test',columns=['名次','姓名']))


 

# ### 缺失值处理(na_rep)

 

# In[14]:


 

# 缺失值填充为 0

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk',sheet_name='test',na_rep=0))


 

# ### 无穷值处理(inf_rep)

 

# In[19]:


 

# 一个浮点数除以 0,就会得到一个无穷值,把无穷值替换为 0

print(df3.to_excel(excel_writer=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',encoding='gbk',sheet_name='test',inf_rep=0))


 

# ## 导出 csv 文件(to_csv)

# ### 设置文件导出路径(path_or_buf)

 

# In[21]:


 

print(df3.to_csv(path_or_buf=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.csv',encoding='gbk'))


 

# ### 设置索引

# ### 设置导出的列

# ### 缺失值处理

# 与 to_excel 方法一致

 

# ### 设置分割符号(sep)

 

# In[23]:


 

print(df3.to_csv(path_or_buf=r'C:\Users\13479\Desktop\python项目\Excel数据\df3.csv',encoding='gbk',sep=','))


 

# ## 将文件导出到多个 Sheet (ExcelWriter())

 

# In[26]:


 

# 可以将多个文件放在一个文件的不同 Sheet 中

 

# 声明一个读写对象

writer = pd.ExcelWriter(r'C:\Users\13479\Desktop\python项目\Excel数据\df3.xlsx',engine='xlsxwriter')

 

# 将 df1,df2 写入 excel 的 sheet1,sheet2 ,并命名为 表1,表2

df1 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df1.csv',encoding='gbk')

df2 = pd.read_csv(r'C:\Users\13479\Desktop\python项目\Excel数据\df2.csv',encoding='gbk')

print(df1.to_excel(writer,sheet_name='表1'))

print(df2.to_excel(writer,sheet_name='表2'))

 

# 保存读写内容

writer.save()


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值