遍历dataframe中的某列,找出含有空格的元素

工作上需要处理一个数据,把一个较大数据中的姓名列和账号列全部遍历一遍,然后看是否数据里面含有空格
一开始想法是用for循环,一行一行遍历df数据,这个方法效率太慢,搜索一下,有个博主发现了一个map函数,太厉害了,我直接用了,准备先贴我的代码,后面是博主的原贴

import pandas as pd 
import numpy as np 
import datetime 
import shutil 
import xlwings as xw 
import os 
date_today = datetime.date.today() 
starttime = datetime.datetime.now() 
list_file=os.listdir('D:\文档数据\金\清洗\待清洗\\') 
Name_rawData='D:\文档数据\金\清洗\待清洗\\' + str(list_file[0]) 
Df_rawData = pd.DataFrame(pd.read_excel(Name_rawData)) 
Df_newData=Df_rawData[['户名','账号']] 
name_array=Df_newData.applymap(lambda x:' ' in x) 
print(name_array) 
app=xw.App(visible=True,add_book=False) 
app.display_alerts=False 
app.screen_updating=False 
excelFile = xw.Book(Name_rawData) 
rowmax=name_array.shape[0] 
sht_person=excelFile.sheets['sheet1'] 
rng_person = sht_person[:rowmax,8:10] 
rng_person.value=name_array 
excelFile.save() 
excelFile.app.quit() 
endtime = datetime.datetime.now() 
print('本次用时 %s 秒' %(endtime - starttime).seconds) 

下面是原帖子

假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字

那么可以用python的pandas库来实现。

方法一:

pandas的dataframe有一个很好用的函数applymap,它可以把某个函数应用到dataframe的每一个元素上,而且比常规的for循环去遍历每个元素要快很多。如下是相关代码:

import pandas as pd
data = [["str","ewt","earw"],["agter","awetg","aeorgh"]]
dataframe1 = pd.DataFrame(data=data,columns=["name1","name2","name3"])
print(dataframe1)
bool_array = dataframe1.applymap(lambda x:"w" in x)
out_array = dataframe1[bool_array]
print(out_array)

>>
   name1  name2   name3
0    str    ewt    earw
1  agter  awetg  aeorgh

  name1  name2 name3
0   NaN    ewt  earw
1   NaN  awetg   NaN

代码中,bool_array为一个逻辑矩阵,满足条件元素的位置为true,否则为false。然后通过逻辑矩阵去索引dataframe1,就可以得出满足条件的元素。

方法二:

第一种方法是一次性遍历每个元素,这样不好分column去处理,那换一种方式可以每次遍历一列

#接上面代码
file_columns = dataframe1.columns.tolist()
for column in file_columns:
    bool_index = dataframe1[column].str.contains("w")
    filter_data = dataframe1[column][bool_index] 
    print(filter_data)

>>
Series([], Name: name1, dtype: object)
0      ewt
1    awetg
Name: name2, dtype: object
0    earw
Name: name3, dtype: object

代码种 Series.str.contains 是 Series 才有的一个操作。另外,filter_data只输出每一列中满足条件的元素,更方便下一步的操作。

简单说明:

针对pandas的dataframe和series,有强大的高阶函数:apply,applymap和map函数等,它们比简单的for循环要快很多,善用这些高阶函数会让你事半功倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值