我想替换数据框中输入的某些格式错误的值。例如,850 / 07-498745应该是07-498745。现在,我成功地使用了字符串拆分。但是,它将所有先前正确格式化的字符串转换为NaN。我试图以某种条件为基础,但是仍然有同样的问题。我该如何解决?
示例输入:
mylist = ['850/07-498745', '850/07-148465', '07-499015']
df = pd.DataFrame(mylist)
df.rename(columns={ df.columns[0]: "mycolumn" }, inplace = True)
我的尝试:
df['mycolumn'] = df[df.mycolumn.str.contains('/') == True].mycolumn.str.split('/', 1).str[1]
df
输出:
我想要的东西:
答案 0 :(得分:2)
您可以将split
与/
一起使用,并从列表中获取最后返回的字符串:
df['mycolumn'].str.split('/').str[-1]
0 07-498745
1 07-148465
2 07-499015
Name: mycolumn, dtype: object
答案 1 :(得分:2)
这也将起作用,并且可以帮助您理解为什么原始尝试没有这样做:
mask = df.mycolumn.str.contains('/')
df.mycolumn.loc[mask] = df.mycolumn[mask].str.split('/', 1).str[1]
您正在做df['mycolumn'] = ...
,我相信这只是用您形成的新列替换了该列的整个系列。
答案 2 :(得分:1)
对于正则表达式解决方案:
df.mycolumn.str.extract('(?:.*/)?(.*)$')[0]
输出:
0 07-498745
1 07-148465
2 07-499015
Name: 0, dtype: object