我有以下df:
Name Jan_2018 Feb_2018 Mar_2018
A 33% 40% 42%
B 20% 35% 50%
C 21% 31% 12%
我正在对数字数据(求和,平均值等)进行一些操作,因此我需要删除%符号,以便熊猫可以停止将其视为字符串。但是我的输出需要返回%符号。
此外,我无法对任何列进行硬编码,因为将来可能会添加更多列。
最简单的方法是从数字数据中删除%号,然后再将其重新添加?
答案 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)
这会删除数字左侧的所有非数字字符,并强制转换为浮点数。