pandas技巧demo总结

pandas 利用正则提取多列

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

img

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)
posted @ 2023-06-01 17:32  Pyscm  阅读(67)  评论(0)    收藏  举报