轉載鏈接
根据指定列筛选出含有关键字的数据
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
df.concat(pd1,pd2,axis=0) #合并两个dataframe ,参数为0竖着拼接,为1行向拼接
#合并多个dataframe
d_list=[pd1,pd2,pd3,…]
df.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.to_excel(writer,index=False)
writer.save()
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顺序没变,只是返回的是排序的
0人点赞
python学习记录
作者:万疆璃火
链接:https://www.jianshu.com/p/8cb948a574ea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。