更新
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df.iloc[:,3].replace(r'(?<!\S)\d+(?!\S)', lambda x: p.number_to_words(x.group()), regex=True, inplace=True)
df.iloc[:,3].head(2)
0 15
1 89
Name: D, dtype: int64
df = df.astype(str)
df.iloc[:,3].replace(r'(?<!\S)\d+(?!\S)', lambda x: p.number_to_words(x.group()), regex=True, inplace=True)
df.iloc[:,3].head(2)
0 <function <lambda> at 0x7fd8a6b4db18>
1 <function <lambda> at 0x7fd8a6b4db18>
Name: D, dtype: object
我有一个pandas数据框,有些行包含某些列中的数字。我想使用inflect库来仅替换具有相应单词表示的数字。
我认为df.replace很合适。但是我怎么能指定只有数字 (应该替换所有由空格分隔的数字)并将其作为参数传递给变形?。
p = inflect.engine()
df.replace(r' (\d+) ', p.number_to_words($1), regex=True, inplace=True)
同样,我有第二个数据框,我想在特定的列,索引为4的列中执行此操作。该列仅包含4位数字(年份)。我怎么能这样做?。
答案 0 :(得分:1)
导入re
库,确保您的列的类型为string
,并使用(?<!\S)\d+(?!\S)
来匹配字符串的开头/结尾与空格字符之间的数字序列。如果您只想匹配所有数字的整个条目,可以使用^\d+$
正则表达式。
df.iloc[:,3].astype(str).apply(lambda row: re.sub(r'(?<!\S)\d+(?!\S)', lambda x: p.number_to_words(x.group()), row))
首先,使用.astype(str)
将列强制转换为字符串。然后,(?<!\S)\d+(?!\S)
匹配每个row
,并将该号码发送到.number_to_words()
方法。