我需要更改导入的自定义数据框的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。
我该怎么做?
答案 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
如果是文件对象,大字符串列表或发出字符串的迭代器(最好的那个)