Pandas 判断一列是否包含某字符串

您所在的位置:网站首页 dataframe筛选包含某字符串的值 Pandas 判断一列是否包含某字符串

Pandas 判断一列是否包含某字符串

2023-01-15 03:25| 来源: 网络整理| 查看: 265

1.直接判断 my_df.loc[my_df['往来单位名称'].str.contains('en'), '客户类型'] = '国外客户' 2.字符串截取一部分判断 my_df.loc[my_df['往来单位编号'].str[:1] == 'C', '客户类型'] = '国内客户'

1.字符串调用属性:str

通过str属性操作,会自动排除丢失NaN值

import numpy as np

import pandas as pd

s = pd.Series([‘ace’,’bbb’,’hello’,’100′,np.nan,’black’])

df = pd.DataFrame({‘key1’:list(‘abcdef’),

‘key2’:[‘h1′,’haha’,np.nan,’name’,’ww’,’a1′]

})

print(s)

print(df)

print(‘-‘ * 50)

print(s.str.count(‘b’)) # 统计每个字符串中含有b字母的数量

print(df[‘key1’].str.upper()) # 将字符串转化为大写

print(‘-‘ * 50)

字符串索引

print(‘——-str[0]字符串索引结果——-‘)

print(df[‘key2’].str[0]) # 取第一个字符

print(‘——-str[:2]字符串索引结果——-‘)

print(df[‘key2’].str[:2]) # 取前2个字符

print(‘-‘ * 50)

df.columns可以直接使用str属性,并且df.columns返回的对象可以直接使用list或者tolist()转化为字典.

df.columns = df.columns.str.upper()

print(df)

运行结果:

Pandas 判断一列是否包含某字符串

2.字符串常用方法:lower,upper,len,startswith,endswith

lower:字母转化为小写

upper:字母转化为大写

len:求每个字符串的长度

startswith:判断起始是否为某个指定字母

endswith:判断结束是否为某个指定字母

import pandas as pd

s = pd.Series([‘A’,’bd’,’110′,np.nan,’123′,’hello’,’wd’])

print(s.str.lower(),’——全部小写\n’)

print(s.str.upper(),’——全部大写\n’)

print(s.str.len(),’——求每个字符串的长度\n’)

print(s.str.startswith(‘h’),’——判断起始是否为h\n’)

print(s.str.endswith(‘d’),’——判断结束是否为d\n’)

运行结果:

Pandas 判断一列是否包含某字符串

3.字符串去空格:strip,rstrip,lstrip

strip:去除字符串两边的空格

rstrip:去除字符串左边的空格

lstrip:去除字符串右边的空格

import pandas as pd

s = pd.Series([‘Jac k ‘,’Lucy ‘,’ mm ‘])

df = pd.DataFrame(np.random.randn(3,2),columns=[‘ column A ‘,’ columnB ‘],

index=range(3))

print(s)

print(df)

print(‘——————–‘)

print(s.str.strip(),”——strip()的案例结果\n”) # 去除字符串两边的空格

print(s.str.lstrip(),”—–lstrip()的案例结果\n”) # 去除字符串左边的空格

print(s.str.rstrip(),”—–rstrip()的案例结果\n”) # 去除字符串右边的空格

print(‘——————–‘)

df.columns = df.columns.str.strip() # 去掉列名两边的空格,中间的空格没去掉

print(df)

输出结果:

Pandas 判断一列是否包含某字符串

4.替换:replace

替换replace

import pandas as pd

df = pd.DataFrame(np.random.randn(3, 2), columns=[‘ Column A ‘, ‘ Column B ‘],

index=range(3))

df.columns = df.columns.str.replace(‘ ‘,’-‘)

print(df)

替换

df.columns = df.columns.str.replace(‘-‘,’***’,n=1) # n:替换个数

print(df)

输出结果:

Pandas 判断一列是否包含某字符串

5.字符串分割:split,rspilt

split:根据指定的分隔符对字符串进行分割

rsplit:类似于split,反向工作,即从字符串的末尾到字符串的开头

import pandas as pd

s = pd.Series([[‘a’,’b’,’c’],’1,2,3,4,5′,np.nan,’a1,a2,a3,a4,a5′])

print(s)

print(s.str.split(‘,’)) # 分割

print(‘-‘ * 50 )

获取分割后的第一个list

print(s.str.split(‘,’)[0])

print(‘-‘ * 50 )

使用get或[]符号访问拆分列表中的元素

print(s.str.split(‘,’).str[0])

print(‘————str.get(0)的测试结果————–‘)

print(s.str.split(‘,’).str.get(0))

print(‘————expand=True的测试结果————-‘ )

print(s.str.split(‘,’,expand=True))

print(‘————expand=True & n=3 的测试结果————-‘ )

print(s.str.split(‘,’,expand=True,n=3)) # n参数限制分割数,n=3表示对前3列分割,后面的全部作为一列

print(‘————rsplit 的测试结果————-‘ )

print(s.str.rsplit(‘,’,expand=True,n=3)) # rsplit类似于split,反向工作,即从字符串的末尾到字符串的开头

DataFrame使用字符分割

df = pd.DataFrame({‘key1’:[‘abc’,’123′],

‘key2’:[‘1,2,3′,’acb’]})

print(df)

print(‘———-DataFrame使用split结果———-‘)

对key2列使用split

print(df[‘key1’].str.split(‘*’))

输出结果:

Pandas 判断一列是否包含某字符串

Original: https://blog.csdn.net/Ghjkku/article/details/123181288Author: 追丰少年Title: Pandas 判断一列是否包含某字符串

相关阅读 Title: jupyter notebook 某个cell 一直在运行

近期调试程序,发现一简单的代码一直在运行,很长时间不终止,代码如下:

whole_df=pd.read_csv(r'./train.csv') community=whole_df['COMMUNITY_ID'].unique() for community_id in community: temp=check_result[check_result['COMMUNITY_ID']==community_id] start=temp.index.tolist()[0] delanomaly_test(temp,start)

其中delanomaly_test 是对测试数据进行处理异常值的函数,函数里有对形参temp进行赋值的操作,而temp 是whole_df的切片,执行后,出现了很多提示:

/usr/local/python3/lib/python3.6/site-packages/pandas/core/indexing.py:1763: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

一大串的全是提示,而且还一直扩展向下,过了10分钟,不再出现提示,但是这段cell 执行符号里显示’‘,为一直在执行,本身数据量不大,community 为200个,check_result为8万条,应该2、3分钟就结束了但是又过5分钟还是’‘号,点’Interrupt the kernel ‘也是很长时间没反应。用写标准输出+写文件的方式测试下:

whole_df=pd.read_csv(r'./train.csv') community=whole_df['COMMUNITY_ID'].unique() filename='proeceeing.txt' with open(file_name,'w+') as f: f.write(file_name) w=0 #进度的变量 for community_id in community: if w%50==0: print('w=%s' %str(w)) #打印至标准输出 f=open(file_name,'a') f.write('\n '+str(w)+':')#写入文件 f.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) f.close() temp=check_result[check_result['COMMUNITY_ID']==community_id] start=temp.index.tolist()[0] delanomaly_test(temp,start) w=w+1 print('w=%s' %str(w)) #打印至标准输出 f=open(file_name,'a') print('w=%s' %str(w)) f.write('\n '+str(w)+':') #写入文件 f.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) f.write('\n check_result executed ') f.close()

执行后,文件内容如下:

processing.txt 0:2021-08-25 21:14:38 50:2021-08-25 21:14:43 100:2021-08-25 21:14:49 150:2021-08-25 21:14:54 200:2021-08-25 21:15:00 check_result executed

看来这段代码在一分钟之内已经执行完毕,再看标准输出,还是有很多之前的提示,同时标示进度的w值里,只发现了三条:

w=0

w=50

w=100

再向后就只有提示,再向后提示也终止了

因此这段代码一直执行的可能原因是短时间内写大量内容至标准输出,标准输出缓冲区满,无法打印提示和之后的内容,但程序实际已执行完毕。最后删除delanomaly_test 函数里的切片赋值语句,发现这段代码很快结束,至此问题有三个:切片不可直接赋值,标准输出不可靠,每个提示都要细看

Original: https://blog.csdn.net/robator/article/details/119919618Author: robatorTitle: jupyter notebook 某个cell 一直在运行

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/313850/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3