pandas处理excel表格的工作流

it2023-02-02  82

最近师傅让我帮他整理下excel表格,我就自认为很简单的答应了,没想到是自己给自己挖了一个坑,哈哈。遇到了好多问题,因此,写一篇文章记录下。 其实,仔细分析,这个工作流无非就是 当然讲起来容易,中间也涉及到了一些具体的问题

pandas 读取excel

这里我接触了两种方法:

使用pandas.read_excel(“123.xlsx”)方法 这个方法返回一个DataFrame对象 ,对于有多个工作表的文件 ,会默认读取工作表1,也可以同过索引,来获得第几个表的数据,默认为0。

df= pd.read_excel("123.xlsx",sheet_name=1)

然后,我们处理数据一般都是按行处理的,所以我们可以将数据按行输出

for index,values in df.iterrows(): print(index,values)

并且values 是一个Series对象,可以使用键名读取数据,很方便。

filepandas.ExcelFile(“123.xlsx”) 这个方法会返回一个ExcelFile 对象,这个方法适合一个文件中有好几个表格,然后我们可以按表格读取,做表格数据的合并。 我们可以通过sheet_names,获取一个列表,然后分列表的读取数据。

for sheet_name in file.sheet_names: df_list.append(file.parse(sheet_name)) #通过这种方法,创建一个dataframe的list

对于DataFrame的操作,就可以像方法1那样,按行遍历了。

pandas 进行操作

这次的业务逻辑是,如果一篇文章的作者在一个花名册中存在,那么就保存这条文章记录,反之删除这条记录。但是数据集中有一些问题 ,比如有的名字中间有空格如

"李 明"

我们可以使用如下命令将空格除去:

cdf.fillna("null")# 填充空值 cdf.replace('\s+','',regex=True,inplace=True)#将两个字的名字 之间的空格去掉

同时手机号码会默认变成科学计数法的形式如:

手机号 1.865167e+10

这是因为我们默认数字使用浮点型存储,所以会出现如下形式,我们可以将浮点型的格式设置为不显示小数,使用如下命令

pd.set_option('display.float_format', lambda x: '%.0f' % x)

这涉及到的内容有将一条记录存入列表中,其他并没有什么难度,其代码逻辑如下:

new_excel=[] for index,values in df.iterrows(): if values["成果来源"]=="合著" or values["作 者"] in name_list:# new_excel.append(values)

pandas 导出excel

有了上述的new_excel列表,我们可以将其转化为一个DataFrame对象,然后导出到excel。和输出一样,如果是单个表,我们可以使用to_excel 去输出

df1.to_excel('e:/working_file/data.xlsx',sheet_name='sheet1')

对于有多个数据表,要输出到一个文件,可以使用`

save_path = 'e:/working_file/data.xlsx' writer = pd.ExcelWriter(save_path) df1.to_excel(writer,sheet_name='sheet1') df2.to_excel(writer,sheet_name='sheet2') writer.save() #这就是将多个dataframe写入到一个文件的方法了。

但是输出结束后,你打开看看,会发现手机号那里还是科学计数法表示的,同时前面还多了序列,这时候就需要两个属性了,index=False 和float_format="%.0f" 0表示小数点后0位。 修改后代码如下

df.to_excel("'e:/working_file/data.xlsx'",index=False,float_format="%.0f")

以上就是pandas处理excel表格的工作流,有不足的后期补充。

最新回复(0)