如何有条件地从数据帧列中删除元音?

2024-06-28 11:32:08 发布

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

我有一个简单的数据帧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

但这并没有带来任何改变。最终结果将“TestingIsLongColumnThouldBreakracle”列更改为“TSTNGTHSLNGCLMNTHWLDBRKRCL”


Tags: 数据ltgtdataframedfforif情况
2条回答

尝试使用列的新名称创建列表

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()函数不是这样工作的。您需要分别用空字符串替换每个元音:

>>> 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")

相关问题 更多 >