pandas将数字转换为每行和一个特定列中的单词

时间:2018-04-24 07:25:30

标签: regex python-2.7 pandas dataframe replace

更新

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位数字(年份)。我怎么能这样做?。

1 个答案:

答案 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()方法。