如何解决使用条件操作数据框的列
enter code here
为了将字符串的后缀更改为数据帧列中的前缀,例如,使用以下代码。
import pandas as pd
df = pd.DataFrame({'a':['100000.ss','200000.zz'],'b':[10,18]},index=[1,2])
a b
1 100000.ss 10
2 200000.zz 18
我在下面尝试了一行代码,但是结果显示if else语句不起作用。为什么?
df['a'] = df['a'].apply(lambda x: 'ss.'+x[:6] if x.find("ss") else 'zz.'+x[:6])
a b
1 ss.100000 10
2 ss.200000 18
解决方法
当有一个图书馆为您完成这项工作时,为什么要努力工作....
import pandas as pd
from pathlib import Path
df = pd.DataFrame({'a':['100000.ss','200000.zz'],'b':[10,18]},index=[1,2])
df.assign(
a=lambda x: x["a"].apply(lambda s: f"{Path(s).suffix[1:]}.{Path(s).stem}")
)
输出
a b
ss.100000 10
zz.200000 18
,
在较少的行数中可能有此选项。我有解决办法
import pandas as pd
df = pd.DataFrame({'a':['100000.ss',2])
df[['First','Last']] = df.a.str.split(".",expand=True)
df['a']=df['Last']+'.'+df['First']
df.drop(['First','Last'],axis=1)
,
您的lambda函数的每个x
是一个字符串。如果找不到,x.find
返回-1
。 -1
被视为布尔值True
。因此,您的lambda始终返回ss + ...
。尝试将您的lambda更改为此
df['a'].apply(lambda x: 'ss.'+x[:6] if x.find("ss") != -1 else 'zz.'+x[:6])
Out[4]:
1 ss.100000
2 zz.200000
Name: a,dtype: object
无论如何,您不需要apply
来解决此问题。只需使用熊猫str
访问器
df['a'].str[-2:] + '.' + df['a'].str[:-3]
Out[10]:
1 ss.100000
2 zz.200000
Name: a,dtype: object
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。