熊猫-替换数据中的%号并将其放回

时间:2018-09-26 15:01:24

标签: python pandas dataframe

我有以下df:

Name   Jan_2018   Feb_2018  Mar_2018
A      33%        40%       42%
B      20%        35%       50%
C      21%        31%       12%

我正在对数字数据(求和,平均值等)进行一些操作,因此我需要删除%符号,以便熊猫可以停止将其视为字符串。但是我的输出需要返回%符号。

此外,我无法对任何列进行硬编码,因为将来可能会添加更多列。

最简单的方法是从数字数据中删除%号,然后再将其重新添加?

3 个答案:

答案 0 :(得分:1)

替换:

df = df.replace({'%':''}, regex=True)

    Name    Jan_2018    Feb_2018    Mar_2018
0   A       33          40          42
1   B       20          35          50
2   C       21          31          12

转换为数字

df = df.apply(lambda s: pd.to_numeric(s, errors='ignore'))

df.dtypes
Name        object
Jan_2018     int64
Feb_2018     int64
Mar_2018     int64
dtype: object

仅将数字列转换回%

mask = df.dtypes[[np.issubdtype(x, np.number) for x in df.dtypes]].index
df.loc[:, mask] = df.loc[:, mask].astype(str).add('%')

    Name    Jan_2018    Feb_2018    Mar_2018
0   A       33%         40%         42%
1   B       20%         35%         50%
2   C       21%         31%         12%

答案 1 :(得分:0)

删除%

df=df.apply(lambda x : x.str.rstrip('%'))
df
#df=df.apply(pd.to_numeric,errors='ignore')

Out[156]: 
  Name Jan_2018 Feb_2018 Mar_2018
0    A       33       40       42
1    B       20       35       50
2    C       21       31       12

添加回

#df.iloc[:,1:]=df.iloc[:,1:].astype(str)
df.iloc[:,1:]+='%'
df
Out[160]: 
  Name Jan_2018 Feb_2018 Mar_2018
0    A      33%      40%      42%
1    B      20%      35%      50%
2    C      21%      31%      12%

答案 2 :(得分:0)

从熊猫数据框中删除%

df.replace({'%': ''}, regex=True)

或者,如果您要替换特定的列,则:

df['some_col'].replace({'%': ''}, regex=True)

df['some_col'] = df['some_col'].replace({'%':''}, regex=True)

每个doc的str属性

df['some_col'] = df['some_col'].str.replace('%', '')

另一个很好的示例,完全忽略符号并仅选择带有熊猫的数值:

如果前缀是固定的,则使用str.strip;否则,请使用str.replace:

data = pandas.Series(["U$ 192.0"])
data.str.replace('^[^\d]*', '').astype(float)

这会删除数字左侧的所有非数字字符,并强制转换为浮点数。