【发布时间】:2021-03-11 07:52:51
【问题描述】:
所以我有一个这样的数据框:
FileName
01011RT0TU7
11041NT4TU8
51391RST0U2
01011645RT0TU9
11311455TX0TU8
51041545ST3TU9
我想要的是 DataFrame 中的另一列,如下所示:
FileName |RdwyId
01011RT0TU7 |01011000
11041NT4TU8 |11041000
51391RST0U2 |51391000
01011645RT0TU9|01011645
11311455TX0TU8|11311455
51041545ST3TU9|51041545
本质上,如果前 5 个字符是数字,则与“000”连接,如果前 8 个字符是数字,则只需将它们移动到 RdwyId 列
我是菜鸟,所以我一直在玩这个:
测试一:
rdwyre1=re.compile(r'\d\d\d\d\d')
rdwyre2=re.compile(r'\d\d\d\d\d\d\d\d')
rdwy1=rdwyre1.findall(str(thous["FileName"]))
rdwy2=rdwyre2.findall(str(thous["FileName"]))
thous["RdwyId"]=re.sub(r'\d\d\d\d\d', str(thous["FileName"].loc[:4])+"000",thous["FileName"])
测试 2:
thous["RdwyId"]=np.select(
[
re.search(r'\d\d\d\d\d',thous["FileName"])!="None",
rdwyre2.findall(str(thous["FileName"]))!="None"
],
[
rdwyre1.findall(str(thous["FileName"]))+"000",
rdwyre2.findall(str(thous["FileName"])),
],
default="Unknown"
)
测试 3:
thous=thous.assign(RdwyID=lambda x: str(rdwyre1.search(x).group())+"000" if bool(rdwyre1.search(x))==True else str(rdwyre2.search(x).group()))
以上方法均无效。谁能帮我弄清楚我哪里出错了?以及如何解决?
【问题讨论】:
-
除了5个或8个字符还有其他类型吗?
-
@ombk 不。只有这两个条件
-
我会发布一个非常幼稚的方法,如果它没有帮助让我知道删除它
标签: python regex pandas numpy dataframe