[英]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.