簡體   English   中英

如何有條件地從 pandas dataframe 列中刪除元音?

[英]How to conditionally remove vowels from pandas dataframe columns?

我有一個簡單的 dataframe df:

{'Testingthislongcolumnthatwouldbreakoracle': {0: 3, 1: 3, 2: 3},
 'goodcolum': {0: 1, 1: 1, 2: 1},
 'goodcolum2': {0: 2, 1: 2, 2: 2}}

我正在嘗試確定列的長度是否> 30,如果是,請檢查刪除元音是否會使列的長度<= 30。如果是這樣,我想將元音從列名並將其保存回 dataframe。 這是我到目前為止所擁有的:

for columnName in df:
    charlength=len(columnName)
    vowels=sum(list(map(columnName.lower().count, "aeiou")))
    if charlength >= 31:
        if charlength - vowels <= 31:
             df[columnName] = df.columns([columnName]).str.replace('[aAeEiIoOuU]', '')
            
    print(columnName, charlength,vowels)
df

但這並沒有做出任何改變。 最終結果會將“Testingthislongcolumnthatwouldbreakoracle”列更改為“Tstngthslngclmnthtwldbrkrcl”

嘗試使用列的新名稱創建一個列表。

import pandas as pd

df = pd.DataFrame({'Testingthislongcolumnthatwouldbreakoracle': {0: 3, 1: 3, 2: 3},
 'goodcolum': {0: 1, 1: 1, 2: 1},
 'goodcolum2': {0: 2, 1: 2, 2: 2}})

col_names = []
for columnName in df:
    charlength=len(columnName)
    vowels=sum(list(map(columnName.lower().count, "aeiou")))
    if charlength >= 31:
        if charlength - vowels <= 31:
          col_names.append(''.join(char for char in columnName if char not in 'aeiouAEIOU'))
    else:
      col_names.append(columnName)   
    
print(df)
df.columns=col_names
print(df)

str.replace str.replace() function 不能那樣工作。 您需要分別用空字符串替換每個元音:

>>> s = "Testingthislongcolumnthatwouldbreakoracle"
>>> for vowel in "aeiou":
...     s = s.replace(vowel, "")
...
>>> s
'Tstngthslngclmnthtwldbrkrcl'

此外,請注意,您無需在匯總結果之前將map列在list中。 實際上會更有效率

s = columnName.lower()
vowel_count = sum(s.count(v) for v in "aeiou")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM