如何从数据帧列中的某些行中删除字符?

2024-09-29 19:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的数据框,我需要清理,作为一个样本,请看看这个数据框

import pandas as pd

cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Suzuki'],
        'Price': ['22000.T','25000.T','27000','.TPX','.NKM1']
        }

df = pd.DataFrame(cars, columns = ['Brand', 'Price'])

print (df)

我想从单词的末尾删除“.T”,只从包含单词的行的开头删除“.”

通过以下代码行,我可以删除“.T”

df['Price'].replace('.T', '', regex=True)

但它也从“.TPX”中删除了“T”

任何关于这方面的建议都将不胜感激

0    22000
1    25000
2    27000
3       PX
4    .NKM1
Name: Price, dtype: object

也用于在添加此行时删除“.”

f['Price'].replace('.', '', regex=True)

我得到了与预期不同的数据帧

0    
1    
2    
3    
4    
Name: Price, dtype: object

Tags: 数据nametruedfobject单词carsprice
3条回答

您还可以使用^{}

In [178]: import numpy as np

In [179]: conds = [df.Price.str.endswith('.T'), df.Price.str.startswith('.')]
In [182]: choices = [df.Price.str.replace('.T', '', regex=True), df.Price.str.replace('.', '', regex=True)]

In [189]: df.Price = np.select(conds, choices, default=df.Price)

In [190]: df
Out[190]: 
            Brand  Price
0     Honda Civic  22000
1  Toyota Corolla  25000
2      Ford Focus  27000
3         Audi A4    TPX
4          Suzuki   NKM1

另一种方法是使用^{},并使用^{}^{}满足您的条件:

import numpy as np

p = df['Price'].str
df['Price'] = np.where(p.startswith('.'),p.replace('.','',regex=True),
                         np.where(p.endswith('.T'),p.replace('.T','',regex=True),p))

            Brand  Price
0     Honda Civic  22000
1  Toyota Corolla  25000
2      Ford Focus  27000
3         Audi A4    TPX
4          Suzuki   NKM1

Series.str.replace

df['Price'] = df['Price'].str.replace(r'^(?:\.)?(.*?)(?:\.T)?$', r'\g<1>')

Series.str.extract

df['Price'] = df['Price'].str.extract(r'^(?:\.)?(.*?)(?:\.T)?$', expand=False)

            Brand  Price
0     Honda Civic  22000
1  Toyota Corolla  25000
2      Ford Focus  27000
3         Audi A4    TPX
4          Suzuki   NKM1

正则表达式详细信息:

  • ^:在行的开始处断言位置
  • (?:\.):与字符.匹配的非捕获组
  • ?:与以前的非捕获组零次或一次匹配
  • (.*?):捕获与除行终止符以外的任何字符匹配的组,零次或多次,但次数尽可能少(lazy match
  • (?:\.T):与.T匹配的非捕获组
  • ?:与以前的非捕获组零次或一次匹配
  • $:断言行末尾的位置

^{}

相关问题 更多 >

    热门问题