删除单词并替换字符串列中的字符

时间:2016-04-05 20:59:50

标签: python pandas dataframe

我需要更改导入的自定义数据框的DSFS列中的值。

MemberID,Year,DSFS,DrugCount
48925661,Y2,9-10 months,7+
90764620,Y3,8- 9 months,3
61221204,Y1,2- 3 months,1

例如," 9-10个月"需要改为9_10。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

试试这个:

In [175]: df.replace({'DSFS': {r'(\d+)\s*\-\s*(\d+)': r'\1_\2'}}, regex=True)
Out[175]:
   MemberID Year         DSFS DrugCount
0  48925661   Y2  9_10 months        7+
1  90764620   Y3   8_9 months         3
2  61221204   Y1   2_3 months         1

到位:

In [176]: df
Out[176]:
   MemberID Year         DSFS DrugCount
0  48925661   Y2  9-10 months        7+
1  90764620   Y3  8- 9 months         3
2  61221204   Y1  2- 3 months         1

In [177]: df.replace({'DSFS': {r'(\d+)\s*\-\s*(\d+)': r'\1_\2'}}, regex=True, inplace=True)

In [178]: df
Out[178]:
   MemberID Year         DSFS DrugCount
0  48925661   Y2  9_10 months        7+
1  90764620   Y3   8_9 months         3
2  61221204   Y1   2_3 months         1

如果您只想保留数字,可以这样做:

In [183]: df.replace({'DSFS': {r'(\d+)\s*\-\s*(\d+).*': r'\1_\2'}}, regex=True)
Out[183]:
   MemberID Year  DSFS DrugCount
0  48925661   Y2  9_10        7+
1  90764620   Y3   8_9         3
2  61221204   Y1   2_3         1

答案 1 :(得分:0)

我没有安装pandas,但解决方案应该适用于df个对象。

string="48925661,Y2,9-10 months,7+"
"_".join(re.findall(r'\b\d+\b', string.split(",")[2]))

测试结果:

>>> "_".join(re.findall(r'\b\d+\b', string.split(",")[2]))
'9_10'

python脚本:

$ cat test.py
with open("sample.csv") as inputs:
    next(inputs)  # skip the first line
    for line in inputs:
        parts = line.strip().split(",")
        parts[2] = "_".join(re.findall(r'\b\d+\b', parts[2]))
        print(",".join(parts))

结果:

$python test.py                                
48925661,Y2,9_10,7+
90764620,Y3,8_9,3
61221204,Y1,2_3,1

答案 2 :(得分:0)

如果你可以使用更好的迭代器。但这些是逗号分隔的值。只需以漂亮的方式使用split()即可。如下所示

cleaned = [line.split(",")[2].replace("-", "_") for line in source]

其中source如果是文件对象,大字符串列表或发出字符串的迭代器(最好的那个)