删除数字之间有空格的数据中的小数位
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
.
从 str
到 int
的直接转换并不总是可行的,在大多数情况下你需要先通过 float
type.
在组(千)分隔符为 space 字符 (1 234 456
) 且小数点 point/separator 为 .
(123.456
),可以使用正则表达式来抓取数字:
\d{1,3}( \d{3})*(\.\d+)?
也就是说:匹配 1-3 个十进制数字,后跟零个或多个由单个 space 组成的组,然后是 3 个十进制数字,然后是一个可选的组单身的 '。'后跟一位或多位小数。
完成后,一个简单的替换将删除组分隔符 (' ') 和小数部分。您需要在正则表达式上指定 global
标志,以便它匹配所有出现的地方。
得到以下代码
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
.
从 str
到 int
的直接转换并不总是可行的,在大多数情况下你需要先通过 float
type.
在组(千)分隔符为 space 字符 (1 234 456
) 且小数点 point/separator 为 .
(123.456
),可以使用正则表达式来抓取数字:
\d{1,3}( \d{3})*(\.\d+)?
也就是说:匹配 1-3 个十进制数字,后跟零个或多个由单个 space 组成的组,然后是 3 个十进制数字,然后是一个可选的组单身的 '。'后跟一位或多位小数。
完成后,一个简单的替换将删除组分隔符 (' ') 和小数部分。您需要在正则表达式上指定 global
标志,以便它匹配所有出现的地方。