Python/Pandas: 将用逗号分隔的数字转换为千位分隔符

8

我有一个数据框,其中一列包含长数字。我尝试将数字列中的所有值转换为千位分隔符。

df

col_1      col_2
Rooney     34590927
Ronaldo    5467382
John       25647398

我该如何迭代并得到以下结果?
预期结果:
col_1      col_2
Rooney     34,590,927
Ronaldo    5,467,382
John       25,647,398
3个回答

11

你可以使用字符串格式化,

df['col_2'] = pd.to_numeric(df['col_2'].fillna(0), errors='coerce')    
df['col_2'] = df['col_2'].map('{:,.2f}'.format)

请记住col_2现在将是字符串而不是整数。

    col_1   col_2
0   Rooney  34,590,927.00
1   Ronaldo 5,467,382.00
2   John    25,647,398.00

2
我投票支持这个!总的来说,Map函数比Apply函数快得多。 - cs95
我尝试了以下代码: df['col_2'] = df['col_2'].astype(int).map('{:,.2f}'.format)但是出现了错误:ValueError: invalid literal for long() with base 10: '34,590,927' - Preetesh Gaitonde
df.dtypes 的输出是什么? - Vaishali
col2 float64 dtype: object - Preetesh Gaitonde
我尝试了编辑,但很不幸它给了我一个错误: ValueError: 无法将NA转换为整数 - Preetesh Gaitonde
显示剩余2条评论

5

将格式函数应用于col_2

df = df.assign(col_2=df.col_2.astype(int).apply('{:,}'.format))

     col_1       col_2
0   Rooney  34,590,927
1  Ronaldo   5,467,382
2     John  25,647,398

我得到了以下错误: ValueErrorTraceback (most recent call last) ----> 1 df = df.assign(col_2=df.col_2.apply('{:,}'.format)) 2 df/usr/lib64/python2.7/site-packages/pandas/core/series.pyc in apply(self, func, convert_dtype, args, **kwds) 2218 else: 2219 values = self.asobject -> 2220 mapped = lib.map_infer(values, f, convert=convert_dtype) 2221 2222 if len(mapped) and isinstance(mapped[0], Series):pandas/src/inference.pyx in pandas.lib.map_infer (pandas/lib.c:62658)()ValueError: 不能使用's'指定','。 - Preetesh Gaitonde
不错的尝试 - 但对于大型数据框可能会变得更慢。 - cs95
@galaxyan: 仍然出现错误: ValueError: 无效的字面值,使用基数10:'34,590,927' - Preetesh Gaitonde
@Rooney,你已经改过col_2了吗? - galaxyan
是的,我尝试了 df = df.assign(col_2=df.col_2.astype(int).apply('{:,}'.format)) - Preetesh Gaitonde
显示剩余3条评论

0
d = len(list(df.columns))

例如 d=22

d = d-2,我们只想转换20列

for x in df.columns[-d:]:
     df[x] = [(locale.format("%d", a, grouping=True)) for a in df[x]]

这将解决问题并动态地使其逗号分隔。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接