【发布时间】:2020-11-25 17:10:41
【问题描述】:
我有一个这样的数据框:
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])
...我收到列表索引超出范围的错误。
但是,如果我像这样检查 DataFrame 中的任何单个索引...
df['id_split'][0][1]
...这行得通,只产生字符串列表中的第二项。
我想我对 .apply() 方法的作用还不够熟悉,无法知道它为什么不接受列表索引。但无论如何,我想知道如何隔离每个字符串的第二部分和第三部分,检查它们的值,并以可扩展的方式输出基于这些值的布尔值(实际数据集是数百万行)。谢谢!
【问题讨论】:
-
df.id.str.split(".",expand=True)将为您提供多个列
标签: python pandas dataframe split apply