使用 pandas库操作 Excel
·
安装 pandas 和 openpyxl:
pip install pandas openpyxl
读写 Excel 文件到 DataFrame:
import pandas as pd
#create file
df = pd.DataFrame()
df.to_excel('e:/test.xlsx')
#read file, default sheet is 0
df = pd.read_excel('example.xlsx')
#读取某个工作簿的数据,sheet_name可以是索引或者字符串,默认值为0
#可用通过参数读取部分数据
data = pd.read_excel('test.xlsx',sheet_name=0)
row,col = data.shape
x = data.colums #column list
data.colums =['ID','name','age'] #set columns title
#reload the data,set index as ID
data = pd.read_excel('e:/test.xlsx',index_col="ID")
#create data
d1 = pd.Series([10,20,30],index=[1,2,3],name='a')
d2 = pd.Series([40,50,60],index=[1,2,3],name='b')
d3 = pd.Series([100,200,300],index=[2,3,4],name='c')
df = pd.DataFrame({d1.name:d1,d2.name:d2,d3.name:d3})
df2 = pd.DataFrame([d1,d2,d3])
#two meathod to use the data,loc and iloc function
#using index
v = df.loc[1:2]
#using position
v = df.iloc[1,2]
pandas数据结构
#一维带标签数组
a = pd.Series([1,3,2,4,2])
b = pd.Series([112,34,55,233],indexc=list('abcd'))
dict = {
'name':'hony',
'age':'22',
'tel':'8888888888'
}
info = pd.Series(dict)
#Series本职是两个数组,一个四键,一个是值
print(info[0]) #hony
print(info['name']) #hony
print(info.index) #['name','age','tel']
print(info.values) #['hony','22','88888888888']
#二维数据,Series容器
a = pd.DataFrame(np.arange(1,13)).reshape(3,4)) # 3x4
a = pd.DataFrame(np.arange(1,13).reshape(3,4),index='123',columns=list('ABCD'))
list2 = [{'name':'kitty','age':'22'},{'name':'pytty','age':''55}]
person = pd.DataFrame(list2)
#切片操作
ls = person[:2] #row
ls = person['name'] #column
#标签索引取值
ls = person.loc[1,:] #first row
ls = person.loc[[0,1]] #two rows
ls = person.loc[:,'name'] #one column
ls = person.loc[:,['name','age']] # two column
#位置取值
ls = person.iloc[0,] #row
ls = person.iloc[:,0] #column
ls = person.iloc[0,1] #like cell(0,1)
ls = person.iloc[[0,1],[0,1]] # 2 x 2
将 DataFrame 写入 Excel 文件:
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.to_excel('output.xlsx', index=False)
访问单元格方法
访问一列:df["A"]
访问多列:df["A","B"]
访问一行:df.iloc[0]
访问一行:df.loc["地区1"]
访问多行:df.iloc[[0,2,4]]
访问多行:df.ilco[["地区1","地区2","地区3"]]
访问单元格:df.ilco[2,1]
访问单元格:df.loc["地区1","天门"]
选取前3行数据 :df.iloc[:3,:]
读取第三行从第四列开始的数据: result = df.iloc[2, 3:]
loc[row,cloumn]全行或者列
iloc[index,columns]使用索引,从0开始
#单元格赋值,采用列名
df[i,'score'] = 90
df[i,'grade']='A'
#对行赋值
df[i]=[90,'A']
写入数据
写入新文件,index默认是有一个从0开始的索引列,设置index=False可以去掉这个索引列
df.to_excel(excel_writer="to_excel.xlsx",sheet_name="to_excel",index=None)
向Excel追加数据,需要将原来数据读出来,然后一并写入。
original_data = pd.read_excel('test.xlsx')
data = {'city':['beijing','shanghai'],'grade':['1','3']}
data2 = pd.DataFrame(data)
save_data = original_data.append(data2)
save_data.to_excel('test.xlsx')
将多个DataFrame数据写入多个sheet中:
mode:写入模式默认为w
if_sheet_exists:工作表存在时的处理,默认为error(抛出错误),new,replace(替换)
test=pd.DataFrame(np.arange(0,100).reshape([25,4]))
test1=pd.DataFrame(np.arange(100,200).reshape([25,4]))
writer = d.ExcelWriter(r"C:\test.xlsx",engine="openpyxl",mode="a")#追加式导出,不覆目标文件盖原有内容
test.to_excel(writer,"test",index=False) #将test导出至名为test的Sheet页上
test1.to_excel(writer,"test1",index=False) #将test1导出至名为test1的Sheet页上
overlay(现表覆盖写入),同一表写入多个df数据
with ExcelWriter("path_to_file.xlsx",
mode="a",
engine="openpyxl",
if_sheet_exists="overlay",
) as writer:
df1.to_excel(writer, sheet_name="Sheet1")
df2.to_excel(writer, sheet_name="Sheet1", startcol=3)
数据预处理
#处理数据引擎,需指定
df = pd.read_excel('file.xlsx', engine='openpyxl')
#使用第一行为表头
df = pd.read_excel('file.xlsx', sheet_name='Sheet1', header=0)
#无表头
df = pd.read_excel('file.xlsx', sheet_name='Sheet1', header=None)
#指定表头
df = pd.read_excel('file.xlsx', sheet_name='Sheet1', names=['name','age'])
#索引列为第一列,默认不设置索引列
df = pd.read_excel('file.xlsx', sheet_name='Sheet1',index_col=0)
#读取指定的列
df = pd.read_excel('file.xlsx', sheet_name='Sheet1',usecols='A,B')
df = pd.read_excel('file.xlsx', sheet_name='Sheet1',usecols='A:H')
df = pd.read_excel('file.xlsx', sheet_name='Sheet1',usecols=[0,1])
#数据类型如果不传,则自动推断
df = pd.read_excel('file.xlsx', dtype=[datetime,str,float]) #指定数据类型
#缺失数据处理
df.fillna(0, inplace=True) # 用0填充缺失值
df.dropna(inplace=True) # 删除包含缺失值的行
df['column'] = df['column'].astype('int') # 将列转为整型
df['column'] = pd.to_numeric(df['column'], errors='coerce') # 安全转为数值,非数值转换为NaN
#文本数据的处理
df['column'] = df['column'].str.strip() # 去除两端空格
df['column'] = df['column'].str.lower() # 转为小写
df.drop_duplicates(inplace=True) # 删除完全重复的行
#归一化、标准化
df['column'] = (df['column'] - df['column'].mean()) / df['column'].std() # Z-score标准化
df['column'] = (df['column'] - df['column'].min()) / (df['column'].max() - df['column'].min()) # Min-Max归一化
#替换
df.loc[df['column'] > 100, 'column'] = 100 # 将大于100的值替换为100
df.replace({'old_value': 'new_value'}, inplace=True) # 替换特定值
#使用str.split()拆分列,pd.concat()或merge()合并多个DataFrame
df[['col1', 'col2']] = df['column'].str.split(',', expand=True) # 按逗号分列
new_df = pd.concat([df1, df2], axis=1) # 横向合并
#保存到文件,不要索引列
df.to_excel('processed_file.xlsx', index=False)
ExcelFile类
多表单同时处理
excel_file = pd.ExcelFile('data.xlsx')
#获取所有sheet名字列表
sheets=excel_file.sheet_names
#读取指定sheet
df=excel_file.parse('sheetname')
excel_file.close()
更多推荐


所有评论(0)