如何根据条件将字符串拆分方法应用于熊猫数据框?

时间:2020-01-14 16:35:55

标签: python string pandas split data-cleaning

我想替换数据框中输入的某些格式错误的值。例如,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

输出:

enter image description here

我想要的东西:

enter image description here

3 个答案:

答案 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