熊猫数据框行数据过滤

时间:2018-07-19 19:14:10

标签: pandas dataframe

我在Pandas数据框中有一列数据,格式为Bxxxx-xx-xx-xx.y。我只需要第一部分(Bxxxx)。如何分割数据?另外,我在同一列中有BSxxxx-xx-xx-xx格式的数据,我想使用regex ='^ BS'命令删除该数据(由于某些原因,它不起作用)。在这方面的任何帮助将不胜感激。顺便说一句,我正在使用df.filter命令。

4 个答案:

答案 0 :(得分:0)

您可以定义一个函数,在其中将Bxxxx-xx-xx-xx.y视为字符串,并仅提取前5个索引。

    >>> def edit_entry(x):
    ...     return (str(x)[:5])
    >>> df['Column_name'].apply(edit_entry)

答案 1 :(得分:0)

单线解决方案是:

df["column_name"] = df["column_name"].apply(lambda x: x[:5])

答案 2 :(得分:0)

请考虑以下示例:

df = pd.DataFrame({
    'col':['B123-34-gd-op','BS01010-9090-00s00','B000003-3frdef4-gdi-ortp','B1263423-304-gdcd-op','Bfoo3-poo-plld-opo', 'BSfewf-sfdsd-cvc']
})
print(df)

输出:

    col
0   B123-34-gd-op
1   BS01010-9090-00s00
2   B000003-3frdef4-gdi-ortp
3   B1263423-304-gdcd-op
4   Bfoo3-poo-plld-opo
5   BSfewf-sfdsd-cvc

现在,我们要做两个任务:

  1. 从Bxxx-xx-xx-xxx中提取Bxxxx部分。
  2. 删除BSxxx格式的字符串。

考虑以下使用startswith()的代码:

df[~df.col.str.startswith('BS')].col.str.split('-').str[0]

输出:

0        B123
2     B000003
3    B1263423
4       Bfoo3
Name: col, dtype: object

故障:

df[~df.col.str.startswith('BS')]给我们所有不以BS开头的字符串。接下来,我们使用-拆分这些字符串,并使用.col.str.split('-').str[0]进行第一部分。

答案 3 :(得分:0)

这应该有效。

df[df.col1.apply(lambda x: x.split("-")[0][0:2]!="BS")].col1.apply(lambda x: x.split("-")[0])