删除数字之间有空格的数据中的小数位

removing decimal places in a data with spaces in-between numbers

得到以下代码

import pandas as pd
import numpy as np
df1=pd.read_excel('FA9th june.xlsx')
df1.head()
    Days    Amount  Repayments  Balance
40.0    19 500.00   15 000.00   4 500.00
40.0    19 500.00   0           19 500.00
40.0    9 750.00    2 670.00    7 080.00
40.0    32 500.00   11 500.00   21 000.00
40.0    3 250.00    580         2 670.00

我希望我的数据在数字之间没有空格且没有小数位,如下所示:

    Days    Amount  Repayments  Balance
   40       19500   15000       4500
   40       19500   0           19500
   40       9750    2670        7080
   40       32500   11500      21000
   40       3250    580         2670

我尝试将其转换为 int,但它一直返回此错误:

 invalid literal for int() with base 10: '19 500.00'

每当我 运行 此代码时:

df1['Amount'] = pd.to_numeric(X['Amount'], errors='ignore').astype(int)

您也可以这样做:

df = df.replace(' |\.[0-9]*', '', regex=True).astype('int32')

df = df.replace(' |\.\d*', '', regex=True).astype(int)
df
   Days  Amount  Repayments  Balance
0    40   19500       15000     4500
1    40   19500           0    19500
2    40    9750        2670     7080
3    40   32500       11500    21000
4    40    3250         580     2670

您需要这些转化:

df1['Days'] = df1['Days'].astype(int)
df1['Amount'] = df1['Amount'].map(lambda x: x.replace(' ','')).astype(float).astype(int)
df1['Repayments'] = df1['Repayments'].astype(str).map(lambda x: x.replace(' ','')).astype(float).astype(int)
df1['Balance'] = df1['Balance'].map(lambda x: x.replace(' ','')).astype(float).astype(int)

给出:

   Days  Amount  Repayments  Balance
0    40   19500       15000     4500
1    40   19500           0    19500
2    40    9750        2670     7080
3    40   32500       11500    21000
4    40    3250         580     2670

Days 列很简单:只需将其转换为 int
对于其他列,您需要在 str 中转换它们,如有必要,如 Repayments,然后应用 .replace(' ','') 方法删除空格,然后在 float 中转换它们,最后在int.
strint 的直接转换并不总是可行的,在大多数情况下你需要先通过 float type.

在组(千)分隔符为 space 字符 (1 234 456) 且小数点 point/separator 为 .123.456),可以使用正则表达式来抓取数字:

\d{1,3}( \d{3})*(\.\d+)?

也就是说:匹配 1-3 个十进制数字,后跟零个或多个由单个 space 组成的组,然后是 3 个十进制数字,然后是一个可选的组单身的 '。'后跟一位或多位小数。

完成后,一个简单的替换将删除组分隔符 (' ') 和小数部分。您需要在正则表达式上指定 global 标志,以便它匹配所有出现的地方。