pandas:为什么在这里df.replace()方法没作用?

发布于 2022-09-06 01:39:16 字数 1006 浏览 51 评论 0

最近利用pandas来帮同事完成一些无聊的工作,
从某个后台导出销量数据csv格式,想在读入csv数据成数据框后,就把仓库名称替换成它的简称,方便查看。
查阅文档后,说可以用Series.replace(),或者dataframe.replace()方法,
于是写了df.replace('AAA','BBB'),但是不知为什么没有作用,把数据框切片后形成Series,然后用Series.replace()方法也不行,不知道为什么

import csv
import pandas as pd
import numpy as np 
from pandas import DataFrame,Series

csvfilename = 'suppReport.csv' 
df=pd.DataFrame(pd.read_csv(csvfilename,header = 0 ,encoding='gbk'))
ss = df[['仓库编码']]
ss.replace('北领成都商超仓','北领成都')
ss.replace('科捷合肥商超仓','科捷合肥')
df.replace('科捷合肥商超仓','科捷合肥') 

# view first 3 records
print(df[:3]) 
#看了打印结果,名称还是没替换成功= =b

#数据透视表
df_pivortable=pd.pivot_table(df,index=['商品id'],columns=['仓库编码'],
values=['销量'],aggfunc='sum',fill_value= 0,dropna=False)

#
dataframed_pivortable = pd.DataFrame(df_pivortable)
dataframed_pivortable.insert(0,'1',0)  #插入列能成功
print(dataframed_pivortable)


print('executing...')

str_day_filename = '每日销量'+'.xlsx'

dataframed_pivortable.to_excel(str_day_filename, sheet_name='Sheet1')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

妞丶爷亲个 2022-09-13 01:39:16

需要inplace=1

ss.replace('北领成都商超仓','北领成都', inplace=1)
ss.replace('科捷合肥商超仓','科捷合肥', inplace=1)
df.replace('科捷合肥商超仓','科捷合肥', inplace=1) 
叹倦 2022-09-13 01:39:16
import pandas as pd

lst = [
    {"a":1,"b":1},
    {"a":2,"b":2}
]

df = pd.DataFrame(lst)
df['a'] = df['a'].replace(1, 11)
df['a'] = df['a'].replace(2, 22)
print df
奈何桥上唱咆哮 2022-09-13 01:39:16

panda大量操作数据的函数都是not inplace的,新的df作为函数的返回值返回,要直接改动原df的话需要传inplace参数为True

inplace : boolean, default False
If True, in place. Note: this will modify any other views on this object (e.g. a column form a DataFrame). Returns the caller if this is True.

寻找我们的幸福 2022-09-13 01:39:16

批量替换大数据的时候inplace=True是不顶用的 a.f=a.f.replace(x,y) 这种形式好一些

在你怀里撒娇 2022-09-13 01:39:16

有没有可能和这一列的数据类型有关系呢?

data['ss'].replace({-999:np.nan},inplace=True) #这样写也总是替换不成功

data['ss'].astype(float).replace({-999:np.nan},inplace=True) #这样写就成功了

发现data['ss']的数据类型是Object,而替换的-999是int,所以按照上面代码里第一行那样写就会失败,需要先转换一下数据类型

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文