繁体   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