一些常用的Pandas查询记录
1.全文搜索
filterdataFrame= dataFrame.select_dtypes(include='object')
findVal = np.column_stack(filterdataFrame[col].str.contains('查询的字符串', na=False) for col in filterdataFrame)
findSerise = filterdataFrame.loc[findVal.any(axis=1)]
这里简单说一下逻辑
dataFrame.select_dtypes(include=‘object’)先找出是字符串文本的Serise,float数字类型是没有contains方法的;, dataFrame[col].str.contains(‘查询的字符串’, na=False) for col in dataFrame 这段代码 循环查找表中Serise(列)是否包含指定字符串,这个返回结果就是((True,False,False),(True,False,False)),再通过np.column_stack合并[[True, True], [False,False],[False,False]],显示True就代表是相同字符串,再通过loc定位到指定(行)
2.保存或追加数据
combineDataFrame
with pd.ExcelWriter(savePath+'xxxx.xlsx') as writer:
combineDataFrame.to_excel(writer, sheet_name="1sheet",index=False)
combineDataFrame.to_excel(writer, sheet_name="2sheet",index=False)
# 追加相同sheet数据
with pd.ExcelWriter(savePath, mode='a', engine="openpyxl", if_sheet_exists="overlay") as writer
oldSheetDataFrame_1 = pd.read_excel(writer, sheet_name='sheet1')
oldSheetDataFrame_2 = pd.read_excel(writer, sheet_name='sheet2')
combineWhBillDataFrame.to_excel(writer, startrow=oldSheetDataFrame_1.shape[0] + 1, header=False, sheet_name='sheet1', index=False)
combineRelDataFrame.to_excel(writer, startrow=oldSheetDataFrame_2.shape[0] + 1, header=False, sheet_name='sheet2', index=False)
# if_sheet_exists: overlay 不删除sheet表内容,写入,如果不规定startrow开始写入行数就会覆盖之前的数据
# replace 删除sheet,重新创建sheet替换
index=false,导出的excel就不会把索引index也一同导入进去,在操作数据index可以不用去掉,这样也方便我们去观察数据。
注意:pandas1.2.0之前 pd.ExcelWriter中engine不能混用,xlsxwriter(默认)、openpyxl二选一
pandas1.4之后 会根据文件后缀选用不同的engine, xlsx -> openpyxl , xls -> xlswriter
。。。。后续持续更新