python pandas 方法详解

根据指定列筛选出含有关键字的数据
import pandas as pd

df = pd.read_excel(j_path_xlsx).iloc[1:-2,2:6]  #从第二行到倒数第二行,从第三列到第七列
#凭证字号这列中含有银行的筛掉,只保留含有自动银行的数据
df = df[df['凭证字号'].str.contains("自动")]
#凭证字号这列中剔除所有含有'自动'的数据
df = df[~df['凭证字号'].str.contains("自动")]  #只需取反即可

#剔除摘要中 '划款'和含有'费'字的数据
df = df[(df['摘要']!='划款')&(~df['摘要'].str.contains("费"))] #剔除不需要的数据

替换dataframe中某列的全部数据
df[df['借贷标志']=='借'] = df[df['借贷标志']=='借'].replace(borrow,borrow1)       
#borrow是原始列数据,borrow1是替换列新数据,注意二者都是列表形式      df[df['借贷标志']=='借']是需要替换的数据列
dataframe根据某列数据分组求和
#根据项目编号分组求和
groupsum = df['发生额'].astype(float).groupby(df['项目编号']).sum()
print(groupsum,type(groupsum))
item_no = df.drop_duplicates(subset='项目编号',keep='first',inplace=False)['项目编号'].values
print(item_no)
for no in item_no:
    print(no,groupsum[no]) #项目编号 总金额
    #获取项目编号中的关键字母
    key_word = re.search('[A-Z]',no).group() 
dataframe根据多列数据分组
import pandas as pd

df = pd.read_excel(j_path_xlsx).iloc[:,][['公司',lv_1,'凭证号','摘要','科目名称','原币金额','借方','贷方','核算项目']]
#根据三列数据分组
df.groupby(['业务日期','凭证号','原币金额'])
#打印一下每组的数量,如下图所示
print(df.groupby(['业务日期','凭证号','原币金额']).size())
1.png
print(len(s.count()))
print(s.size().values)
print(s.size().index)
2.png

分组之后所有的数据是存放在list类型中,可以遍历,遍历后的每个元素是tuple类型,一般有两个元素,第一个元素是分组ID,第二个才是分组成功后的数据,仍旧是dataframe类型,由于数据保密性就不放图了

for i in s:
    if len(i[1])>1:
        print(i)

根据列名获取数据

import pandas as pd

'''
j_path_xlsx--excel表格路径
'''
df = pd.read_excel(j_path_xlsx).iloc[:,][['记账日期','凭证类型','凭证号','摘要','原币金额']] 

pandas 合并两个或多个dataframe

pd.concat(pd1,pd2,axis=0) #合并两个dataframe   ,参数为0竖着拼接,为1行向拼接

#合并多个dataframe
d_list=[pd1,pd2,pd3,...]
pd.concat(d_list,axis=0)

pandas写入excel

方式一 :直接写入excel无法保存写入的格式
import pandas as pd
df = pd.read_excel(r'D:\huidan\账户清单2.0 .xlsx')  #读取文件然后写入另一excel表格
print(df)
d_path = r'D:\huidan\111.xlsx'
df.to_excel(d_path,index=False)  #参数index为索引,默认为True写入时会有索引
方式二 : 例如账号‘2019001900909’写入之后会变成科学计数法的格式,当双击单元格又变成str格式,很不友好,所以尝试第二种方式
import pandas as pd
df = pd.read_excel(r'D:\huidan\账户清单2.0 .xlsx')  #读取文件然后写入另一excel表格
print(df)
df['单据号']=[' %i' % i for i in df['单据号']]   #把所有的数字转换成字符串再写入
d_path = r'D:\huidan\111.xlsx'
writer = pd.ExcelWriter(d_path)
# df_oa.to_excel(writer, sheet_name="导入模板", startrow=1, index=False)
# 指定sheet,从第二行开始写入
df.to_excel(writer,index=False)
writer.save()

# 写入excel并保留被写入表格原格式
app = xw.App(visible=False)
wb = xw.Book(oa_file_path)
# 指定sheet名
ws = wb.sheets['导入模板'] 
# 从第二行开始写入
ws.range('A2').options(index=False).value = df_oa
wb.save()
wb.close()
app.quit()

pandas重新排列索引顺序

df = df.reset_index(drop=True)

pandas根据索引删除行

df.drop(index = 1,axis=1)  #axis不影响结果

pandas根据列名删除列

2,删除列

2.1,del

1
del df['A']  # 删除A列,会就地修改
 

2.2,drop

通过列名称删除:

1
2
df = df.drop(['B', 'C'], axis=1)               # drop不会就地修改,创建副本返回
df.drop(['B', 'C'], axis=1, inplace=True)      # inplace=True会就地修改
使用列数删除,传入参数是int,列表,者切片:

1
2
3
df.drop(df.columns[0], axis=1, inplace=True)       # 删除第1列
df.drop(df.columns[0:3], axis=1, inplace=True)     # 删除前3列
df.drop(df.columns[[0, 2]], axis=1, inplace=True)  # 删除第1第3列

dataframe判断某个值是否是NAN

import numpy as np

if np.isnan(df.[0,1]):     #为空返回True,反之返回False
    print('***NAN***')
创建空的dataframe
pd.DataFrame(columns=('公司',lv_1,'凭证号','摘要','科目名称','原币金额','借方','贷方','核算项目'))
dataframe合并列
#-----增值税

df = pd.read_excel(r'D:\xxd\1\zzs.xls')
print(df)
df['发票代码+发票号码'] = df['发票代码'].map(str)+df['发票号码'].map(str)
dataframe指定列替换满足条件的数值
df_x.loc[df_x['是否勾选(是/否)'] == '否','是否勾选(是/否)'] = '是'
dataframe根据指定列的数值进行排序
df.sort_values("xxx",inplace=True)
#表示df按照xxx这个字段排序,inplace默认为False,如果该值为False,那么原来的pd顺序没变,只是返回的是排序的
dataframe修改列名
# 根据现存列名修改
df_asp = df_asp.rename(columns={"客户编号": "客户编码"})
# 根据列索引来修改
df_endorse_old.columns.values[7] = '承兑人信息开户行名称'
# 修改全部列名
df_endorse_old.columns = ['出票日期', '汇票到期日', '承兑人信息全称', '票据号码', '出票人全称']
# 输出列名
print(df_endorse_old.columns.values.tolist())
dataframe添加列数据,修改列值
# 在指定索引位置添加一列
df_oa.insert(0, '客户编码', df_asp['客户编码'])
# 修改列值
df_endorse_old['背书日期'] = [datetime.datetime.strptime(str(i), "%Y%m%d").strftime("%Y-%m-%d") for i in
                                  df_endorse_old['背书日期']]
df_asp['客户创建日期'] = [str(i)[:10] for i in df_asp['客户创建日期']]
df['单据号']=[' %i' % i for i in df['单据号']]
dataframe类型转换
# 一列数据转换成list
df_endorse_old['背书人名称'].tolist()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容