Python 在DataFrame中拆分字符串并仅保留某些部分
我有这样一个数据帧:Python 在DataFrame中拆分字符串并仅保留某些部分,python,pandas,dataframe,split,apply,Python,Pandas,Dataframe,Split,Apply,我有这样一个数据帧: x = ['3.13.1.7-2.1', '3.21.1.8-2.2', '4.20.1.6-2.1', '4.8.1.2-2.0', '5.23.1.10-2.2'] df = pd.DataFrame(data = x, columns = ['id']) id 0 3.13.1.7-2.1 1 3.21.1.8-2.2 2 4.20.1.6-2.1 3 4.8.1.2-2.0 4 5.23.1.10-2.2 我需要在句点上拆分每个id字
x = ['3.13.1.7-2.1', '3.21.1.8-2.2', '4.20.1.6-2.1', '4.8.1.2-2.0', '5.23.1.10-2.2']
df = pd.DataFrame(data = x, columns = ['id'])
id
0 3.13.1.7-2.1
1 3.21.1.8-2.2
2 4.20.1.6-2.1
3 4.8.1.2-2.0
4 5.23.1.10-2.2
我需要在句点上拆分每个id字符串,然后我需要知道第二部分是13,第三部分是1。理想情况下,我会有一个额外的列,它是一个布尔值(在上面的示例中,索引0将为TRUE,而所有其他列将为FALSE)。但我可以使用多个附加列,其中一个或多个包含单独的字符串部分,一个用于表示布尔值
我首先尝试将字符串拆分为几个部分:
df['id_split'] = df['id'].apply(lambda x: str(x).split('.'))
这是有效的,但是如果我试着像这样隔离字符串的第二部分
df['id_split'] = df['id'].apply(lambda x: str(x).split('.')[1])
df['id_split'][0][1]
…我得到一个错误,列表索引超出范围
然而,如果我像这样检查数据帧中的任何单个索引
df['id_split'] = df['id'].apply(lambda x: str(x).split('.')[1])
df['id_split'][0][1]
…此操作有效,只生成字符串列表中的第二项
我想我对.apply()方法的工作还不够熟悉,不知道它为什么不接受列表索引。但无论如何,我想知道如何仅隔离每个字符串的第二和第三部分,检查它们的值,并基于这些值以可伸缩的方式输出布尔值(实际数据集有数百万行)。谢谢 让我们使用
str.split
获取零件,然后您可以比较:
parts = df['id'].str.split('\.', expand=True)
(parts[[1,2]] == ['13','1']).all(1)
输出:
0 True
1 False
2 False
3 False
4 False
dtype: bool
您可以直接这样做,如下所示:
df['new'] = df['id'].apply(lambda x: str(x).split('.')[1]=='13' and str(x).split('.')[2]=='1')
>>> print(df)
id new
0 3.13.1.7-2.1 True
1 3.21.1.8-2.2 False
2 4.20.1.6-2.1 False
3 4.8.1.2-2.0 False
4 5.23.1.10-2.2 False
你可以这样做
df['flag'] = df['id'].apply(lambda x: True if x.split('.')[1] == '13' and x.split('.')[2]=='1' else False)
输出
id flag
0 3.13.1.7-2.1 True
1 3.21.1.8-2.2 False
2 4.20.1.6-2.1 False
3 4.8.1.2-2.0 False
4 5.23.1.10-2.2 False
df.id.str.split(“.”,expand=True)
将为您提供多个列。。。这在我的示例数据集上有效,但在实际数据集上仍然出现“列表索引超出范围”错误。无论如何,我都会接受这个答案,因为它确实有效,而且我不确定这两个dfs之间的关键区别是什么。谢谢。我怀疑有一些单元格少于2次出现“.”,这将导致str(x).split(“.”)[2]出现此错误。谢谢,我在实际代码中使用了此方法,因为正如上面的一条评论所述,我无法得到处理实际数据集的第一个答案,即使它是此测试数据集上的有效方法。