熊猫数据框将N个小数后的数字替换为空字符串

时间:2020-06-24 18:45:58

标签: python pandas

我正在学习如何在熊猫数据框替换中使用正则表达式。我遇到以下问题:

我正在尝试将N个小数点后的字符串替换为空。 例如12.349 ==> 12.35

MWE

import numpy as np
import pandas as pd
import seaborn as sns

df1 = pd.DataFrame({'A': ['hello','wold'],
                   'B': [12.346789, 12.223344]})
df1 = df1.astype(str)
round_ = 2
to_replace = r"(^\d+\." + r"\d" * round_ + r")(.*)"
repl = lambda m: m.group(0)

df1 = df1.replace(to_replace,repl,regex=True)
df1

Pandas文档说我可以使用正则表达式替换字符串,但是当我使用它时,得到的是函数repr而不是值。 如何解决该问题?

更新

我试图将格式应用于数据帧的转置。 (当然,我可以在转换之前设置样式,但是出于某些原因,我需要应用格式来进行转置。)

df1 = pd.DataFrame({'A': ['hello','wold'],
                   'B': [12.349, 12.22]})
df1 = df1.T
df1.style.format({'B': "{:.2f}"}, axis=0)

参考

4 个答案:

答案 0 :(得分:4)

您可以尝试以下模式:

df1 = df1.replace(r"^(\d+\.\d{," + rf"{round_}" + r'})(\d*)',r'\1',regex=True)

输出:

      survived pclass    age  sibsp  parch    fare
count    891.0  891.0  714.0  891.0  891.0   891.0
mean      0.38   2.30  29.69   0.52   0.38   32.20
std       0.48   0.83  14.52   1.10   0.80   49.69
min        0.0    1.0   0.42    0.0    0.0     0.0
25%        0.0    2.0  20.12    0.0    0.0    7.91
50%        0.0    3.0   28.0    0.0    0.0   14.45
75%        1.0    3.0   38.0    1.0    0.0    31.0
max        1.0    3.0   80.0    8.0    6.0  512.32

答案 1 :(得分:2)

一种方法是乘以100,转换为int然后除以100:

import pandas as pd

df1 = pd.DataFrame({'A': ['hello','wold'],
                   'B': [12.346789, 12.223344]})

df1['B'] = (df1.B * 100).astype(int) / 100

print(df1)

打印:

       A      B
0  hello  12.34
1   wold  12.22

答案 2 :(得分:2)

我认为您只需将df1.B转换为浮点数,然后将mapf-string一起使用

s = df1.B.astype(float).map(lambda x: f'{x:.02f}')

Out[8]:
0    12.35
1    12.22
Name: B, dtype: object

答案 3 :(得分:1)

假设您以字符串开头,则可以将列转换为数字,并使用round()仅保留两位数字。

import pandas as pd

df = pd.DataFrame({'A': ['hello','wold'],
               'B': ['12.346789', '12.223344']})

df["B"] = round(pd.to_numeric(df["B"]),2)

print(df) 

输出:

A      B
0  hello  12.35
1   wold  12.22

如果您已经有一列数字,那么您只需要这个。

df["B"] = round(df["B"],2)