我有一个简单的数据框 df:
{'Testingthislongcolumnthatwouldbreakoracle': {0: 3, 1: 3, 2: 3},
'goodcolum': {0: 1, 1: 1, 2: 1},
'goodcolum2': {0: 2, 1: 2, 2: 2}}
我正在尝试确定列的长度是否 > 30,如果是,请检查删除元音是否会使列的长度 <= 30。如果是这样,我想然后去除元音从列名中删除并将其保存回数据框。这是我目前所拥有的:
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”
答案 0 :(得分:1)
尝试使用新的列名称创建列表。
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)
答案 1 :(得分:0)
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")