安装 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()

更多推荐