Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用熊猫的正则表达式_Python_Regex_Pandas - Fatal编程技术网

Python 使用熊猫的正则表达式

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):

使用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):
    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)
。。。请尝试在之前进行一些搜索