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
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

微信扫码订阅
UP更新不错过~
关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas中提供了多种方法来筛选数据,其中比较常用的是`boolean indexing`和`query`两种方式。 ## Boolean indexing `Boolean indexing`是指使用逻辑条件来筛选数据的方式。在pandas中,我们可以使用`[]`来实现这一操作,使用`[]`内的逻辑表达式可以筛选出符合条件的行。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用逻辑表达式筛选数据 df_filtered = df[df['A'] > 1] print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,`df_filtered = df[df['A'] > 1]`表示筛选出`'A'`列中大于1的行。 ## Query `query`方法是使用类似SQL的方式来筛选数据。在pandas中,我们可以使用`query`方法来实现这一操作。使用`query`方法可以避免写很长的逻辑表达式,增加代码可读性。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用query方法筛选数据 df_filtered = df.query('A > 1') print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,`df_filtered = df.query('A > 1')`表示筛选出`'A'`列中大于1的行。 另外,`query`方法还支持使用外部变量的方式来传递条件。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用外部变量传递条件 cond = 1 df_filtered = df.query(f'A > {cond}') print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,我们使用了`f-string`将变量`cond`插入到了查询条件中。 总的来说,`Boolean indexing`方式比较灵活,可以灵活处理各种复杂的逻辑条件,而`query`方式则更加简单易懂。在实际应用中,我们可以根据具体情况选用不同的方式进行数据筛选。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值