Python 使用熊猫的正则表达式
使用pandas和python:我试图创建一个新列,如果正则表达式出现在其他指定列中,该列将显示“1” 例如,我想创建一个名为“Rheum”的新列,如果表达式“391.1”出现在每行对应的列“ICD”中,则该列的值为“1”。在ICD列的某些行中,有一些单元格具有各种形式的表达式“424.1、391.1、420.2等” 到目前为止,我已经:Python 使用熊猫的正则表达式,python,regex,pandas,Python,Regex,Pandas,使用pandas和python:我试图创建一个新列,如果正则表达式出现在其他指定列中,该列将显示“1” 例如,我想创建一个名为“Rheum”的新列,如果表达式“391.1”出现在每行对应的列“ICD”中,则该列的值为“1”。在ICD列的某些行中,有一些单元格具有各种形式的表达式“424.1、391.1、420.2等” 到目前为止,我已经: import pandas as pd df = pd.read_csv('example_worksheet.csv') def ICD(c):
import pandas as pd
df = pd.read_csv('example_worksheet.csv')
def ICD(c):
if c[df['ICD9'].apply(str).str.contains('391.1', na=False)] == True:
return '1'
else:
return '0'
df['Rheum'] = df.apply(ICD, axis=1)
示例数据帧:
Patient ICD9
123 424.1, 391.1, 420.2
323 390.8, 420.2, 260
454 391.1, 424.2
当然!示例数据帧:
Patient ICD9
123 424.1, 391.1, 420.2
323 390.8, 420.2, 260
454 391.1, 424.2
但是,此代码会产生一个新的列“Rheum”,每行只有“0”。您可以使用
str.contains
:
import pandas as pd
df = pd.DataFrame({'col1':[1,2,3],'ICD':['424.1, 391.1, 420.2, etc','ABV','391.1']})
df['Rheum'] = df.ICD.str.contains('391.1').astype(int)
#Out[7]:
# ICD col1 Rheum
#0 424.1, 391.1, 420.2, etc 1 1
#1 ABV 2 0
#2 391.1 3 1
str.contains
返回布尔值。您可以使用简单的“添加0”将其转换为整数:
df['Rheum'] = df.ICD.str.contains('391.1') + 0
例如:
import pandas as pd
from io import StringIO
data ="""
Patient ICD9
123 424.1, 391.1, 420.2
323 390.8, 420.2, 260
454 391.1, 424.2
"""
df = pd.read_csv(StringIO(data), sep=' \s+')
df['Rheum'] = df.ICD9.str.contains('391.1') + 0
In [122]: df
Out[122]:
Patient ICD9 Rheum
0 123 424.1, 391.1, 420.2 1
1 323 390.8, 420.2, 260 0
2 454 391.1, 424.2 1
你能发布你的部分数据框吗?当然!示例数据框:患者ICD9 123 424.1、391.1、420.2 323 390.8、420.2、260 454 391.1、424.2请使用数据框编辑您的问题非常感谢Anton!如果将“数据”编码为CSV文件,其中包含“患者”和“ICD9”列,是否有方法导入CSV并使用您建议的代码?是的,您可以使用
df=pd.read_CSV('your_file',name=['patient',ICD9'])
然后使用该dfIf操作,如果我加载的CSV文件自动将ICD列导入为int类型,如何将此任务转换为字符串?@AMS您可以使用dataframe和series的方法astype(str)
或者使用df['ICD'].应用(str)
。。。请尝试在之前进行一些搜索