使用python-pandas处理excel数据时,常用命令汇总
数据处理
导入输出文件
导入文件:
df = pd.read_excel('文件路径/文件名.xlsx') #读取指定sheet df = pd.read_excel("test.xlsx", engine="openpyxl", sheet_name="表1")
导出文件:
df.to_excel('输出文件名.xlsx')
查询数据
iloc 与 loc 查询的区别:
iloc
的意思是基于索引(index-based selection),输入为索引,也就是,行是(0,1,2,3,4)中的值(行索引),列是(0, 1, 2,…)中的值(列索引)。
loc
的意思是基于标签(label-based selection),输入为标签,也就是,行是(0,1,2,3,4)中的值,列是(‘列名1’, ‘列名2’, ‘列名3’,…)中的值。
可以理解为
iloc
输入的是坐标,loc
输入的是具体含义。两个方法容易被混淆的点,在于这里行坐标(0, 1, 2, 3, 4,…)恰好也是具体含义,但iloc中的数字与loc中的数字真实含义不同。
也正是因为这个差距,容易导致一个错误。
在对数据进行切片操作时,iloc与Python中 (:)的含义相同,包含(:)前的值,不包含(:)后的值。
而在loc中使用(:)不仅包含(:)前的值,也包含(:)后的值。
1、根据行索引查找某行数据:df.loc[行索引]
或者 df.iloc[行索引]
2、根据行索引查找某一段数据:df.iloc[a:b]
或者df[a,b]
或者 df.loc[a,b]
——a为起始行索引,b为接数行索引
注意:df.iloc[a:b]
与df[a,b]
效果一样,都不包含b行的值; df.loc[a,b]
包含b行的值
3、根据索引查找某行某列数据:df.loc[a,'列名']
——a为行索引,第二个参数对应输入所需列名
可以查找多列数据:df.loc[a,['列名A','列名B']]
或者:df.iloc[a,b]
——a行索引,b为列索引
原表:
# 读取文件 import pandas as pd df = pd.read_csv('match.csv') #查找行索引为1的数据 print(df.loc[1]) 输出: Name Jae Crowder Team Boston Celtics Number 99.0 Position SF Age 25.0 Height 6-6 Weight 235.0 College Marquette Salary 6796117.0 Name: 1, dtype: object
# 根据据行索引查找某一段数据 df.loc[1:5] 输出如下: Name Team Number Position Age Height Weight College Salary 1 Jae Crowder Boston Celtics 99.0 SF 25.0 6-6 235.0 Marquette 6796117.0 2 John Holland Boston Celtics 30.0 SG 27.0 6-5 205.0 Boston University NaN 3 R.J. Hunter Boston Celtics 28.0 SG 22.0 6-5 185.0 Georgia State 1148640.0 4 Jonas Jerebko Boston Celtics 8.0 PF 29.0 6-10 231.0 NaN 5000000.0 5 Amir Johnson Boston Celtics 90.0 PF 29.0 6-9 240.0 NaN 12000000.0
# 根据索引查找某行某列数据 print(df.loc[1,'Name']) 输出如下: Jae Crowder #查找某一行多列数据 print(df.loc[1,['Name','Team']]) 输出如下: Name Jae Crowder Team Boston Celtics Name: 1, dtype: object #查找多行多列数据 print(df.loc[1:4,['Name','Team']]) 输出如下: Name Team 1 Jae Crowder Boston Celtics 2 John Holland Boston Celtics 3 R.J. Hunter Boston Celtics 4 Jonas Jerebko Boston Celtics
- 查看文件最后5行的数据
import pandas as pd df = pd.read_csv('match.csv') 1\ 查看最后5行所有数据 print(df.tail(5)) 2\ 查看最后5行指定列数据 #方法一 print(df[['Name','Team','College','Salary']].tail(5)) #方法二 print(df.loc[df.index[-5:],['Name','Team','College','Salary']])
- 多个条件查询数据1
import pandas as pd df = pd.read_csv('match.csv') # 查找Team=Boston Celtics,且Number >= 40的数据,注意数字不用加引号 print(df[(df['Team']=='Boston Celtics') & (df['Number'] >= 40) ])
- 多条件查询2
#查找某列出席拿过的多个值 print(df[df['Position'].isin(['PG','SF','C'])]) 或者: print(df.query("Position=='PG' | Position=='C' | Position=='SF'")) 或者: print(df.query("Position in ('PG', 'C', 'SF')"))