pandas技巧demo总结
pandas 利用正则提取多列
表中一行存在多个子行,或者其他规则标识的数据字符串,利用正则表达式可以提取想要的内容到多列上

import pandas as pd
df = pd.read_excel("./data/数据拆分多列.xlsx")
df[['A', 'B', 'C']] = df['字段1'].str.extract('^A:(.+)\nB:(.+)\nC:(.+)', expand=True)
df.head()
| 字段1 | A | B | C |
|---|---|---|---|
| A:描述123\nB:描述456\nC:描述789 | 描述123 | 描述456 | 描述789 |
| A:描述123\nB:描述456\nC:描述789 | 描述123 | 描述456 | 描述789 |
| A:描述123\nB:描述456\nC:描述789 | 描述123 | 描述456 | 描述789 |
pandas实现excel常用vlookup匹配
result = pd.merge(data1,data2, how='left', on=['主键'])
result.fillna("0", inplace=True)
含空值null填充自定义值
result.fillna(value="牛逼", inplace=True)
result.fillna("0", inplace=True)
pandas 实现多列内容排序(升序、降序)
result.sort_values(by=['列1',"列2"], axis=0, ascending=[False,True], inplace=True) #ascending是否按指定列的数组升序排列,默认为True,即升序排列
pandas纵向合并表格(横向合并参考vlookup实现)
result = pd.concat([df1
, df2
, df3
, df4
, df5],
ignore_index=True) #合并的数据框需要相同数据字段、顺序
pandas实现遍历单元格应用自定义函数apply
def func(x):
'''依据省区区分留仓类型'''
if x["始发省区"] == x["中转省区"]:
return "出发留仓"
elif (x["始发省区"] in ("安徽省区", "上海省区", "浙江省区", "江苏省区")) & (x["中转省区"] in ("安徽省区", "上海省区", "浙江省区", "江苏省区")):
return "华东"
else:
return "到达留仓"
result["留仓类型"] = result.apply(func, axis=1)
pandas 删除重复项|去重
# keep='first',默认保留第一次出现的重复项
# keep=False删除所有重复项
#keep='last',只保留最后一个重复项
#subset可指定多列
result.drop_duplicates(subset=['字段1'], keep='first', inplace=True)
pandas快速依据条件修正值
timetable.loc[(timetable["装车模式"] == "往返") & (timetable["经停地2"].notnull()), "装车模式"] = "特殊往返"
pandas删除含空值null的行、列
# how='all’时表示删除全是缺失值的行(列)
# how='any’时表示删除只要含有缺失值的行(列)
#axis=1,删除含空值的列
od.dropna(axis=0, how='any', inplace=True)
pandas 矩阵列表构造数据框
df = pd.DataFrame(excel_list, columns=['始发地址', '目的地址', 'slat', 'slng', 'flat', 'flng', '驾驶里程', '行驶时长'])
pandas实现excel透视功能(修正列名)
import numpy as np
#汇总省区长短途出发汇总
kaidan = pd.pivot_table(kaidan, index=["始发圈"], values=['货量'], columns=['圈开单'], aggfunc=np.sum).reset_index()
#拍平透视后的列名
kaidan.columns =[str(s2) for (s1,s2) in kaidan.columns.tolist()]
kaidan.reset_index(drop=True)
kaidan.fillna(0,inplace=True)
kaidan.columns=["始发圈","圈内开单","圈外开单"] #,"圈内开单","圈外开单"为【圈开单】类型
kaidan
pandas实现多文件保存excel
outpath="./结果.xlsx"
excel_writer = pd.ExcelWriter(outpath) # 定义writer,选择文件(文件可以不存在)
Volume1.to_excel(excel_writer, sheet_name='整车货量', index=False) # 写入指定表单
Volume3.to_excel(excel_writer, sheet_name='额定运力', index=False) # 写入指定表单
Volume2.to_excel(excel_writer, sheet_name='长线整车货量', index=False) # 写入指定表单
Volume4.to_excel(excel_writer, sheet_name='长线额定运力', index=False) # 写入指定表单
Volume5.to_excel(excel_writer, sheet_name='修复10t额定运力', index=False) # 写入指定表单
excel_writer.save() # 储存文件
excel_writer.close() # 关闭writer
pandas数据表尾部插入行数据
udf = udf.append({'始发省区': '测试'
, '中转分拨': '测试'
, '货区': '测试'
, '到达2': '测试'
, '到达3': '测试'
, '到达4': '测试'
, '到达5': '测试'}
,ignore_index=True
)
pandas 实现替换关键字为自定义内容
udf.replace([r'\省区'],[""],regex=True)

浙公网安备 33010602011771号