![](/img/trans.png)
[英]Most Pythonic way to remove special characters from rows in a column in Pandas
[英]remove special char from rows in pandas python
我有以下 dataframe...无法删除“-”字符并将其修剪为单元格的正确“int”数字:
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1 USA abc xqz A 165 180-190 170-180 170 170
2 USA abc xqz B 165 180-190 170-180 170 170
3 USA abc xqz C 100 120 110-120 120 120
4 USA abc xqz D 95 110 100 100 110
5 USA abc xqz E 59 70 70 70 70
想要以下 dataframe 到 plot 散点图 plot,品牌名称在 x 轴,MRP 在 y 轴。
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1 USA abc xqz A 165 185 175 170 170
2 USA abc xqz B 165 185 175 170 170
3 USA abc xqz C 100 120 115 120 120
4 USA abc xqz D 95 110 100 100 110
5 USA abc xqz E 59 70 70 70 70
你能帮忙吗? 尝试了许多代码,但无法获得所需的结果/df。
我们试试看:
# extract the date columns
cols = [col for col in df.columns if '-' in col]
df[cols] = (df[cols].astype(str).stack()
.str.extractall('(\d+)')
.astype(float).mean(level=[0,1])[0]
.unstack()
)
Output:
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
-- -------- -------- --------- ------- ------ ----- ------------ ------------ ------------ ------------
0 1 USA abc xqz A 165 92.5 87.5 85 85
1 2 USA abc xqz B 165 92.5 87.5 85 85
2 3 USA abc xqz C 100 60 57.5 60 60
3 4 USA abc xqz D 95 55 50 50 55
4 5 USA abc xqz E 59 35 35 35 35
与np.where
和str.split
:
df['2020-05-15'] = np.where((df['2020-05-15'].str.contains('-')),
(df['2020-05-15'].str.split('-').str[0].astype(float) + df['2020-05-15'].str.split('-').str[1].astype(float)) / 2,
df['2020-05-15'])
df['2020-05-19'] = np.where((df['2020-05-19'].str.contains('-')),
(df['2020-05-19'].str.split('-').str[0].astype(float) + df['2020-05-19'].str.split('-').str[1].astype(float)) / 2,
df['2020-05-19'])
df
使用Series.str.split
和statistics.mean
:
import statistics
df['2020-05-15'] = df['2020-05-15'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))
df['2020-05-19'] = df['2020-05-19'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))
Output:
Branch Market Company Brand Name MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
0 1 USA abc xqz A 165 185 175 170 170
1 2 USA abc xqz B 165 185 175 170 170
2 3 USA abc xqz C 100 120 115 120 120
3 4 USA abc xqz D 95 110 100 100 110
4 5 USA abc xqz E 59 70 70 70 70
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.