Python 3.x 如何替换数据帧中的单元格
形成下面的python数据帧后(例如) 如果我遍历它,我得到Python 3.x 如何替换数据帧中的单元格,python-3.x,pandas,Python 3.x,Pandas,形成下面的python数据帧后(例如) 如果我遍历它,我得到 In [62]: for i in df.itertuples(): ...: print( i.Index, i.Name, i.Age ) ...: 0 Alex 10 1 Bob 12 2 Clarke 13 我想要实现的是替换特定单元格的值 In [67]: for i in df.itertuples(): ...: if i.Name == "Alex": ..
In [62]: for i in df.itertuples():
...: print( i.Index, i.Name, i.Age )
...:
0 Alex 10
1 Bob 12
2 Clarke 13
我想要实现的是替换特定单元格的值
In [67]: for i in df.itertuples():
...: if i.Name == "Alex":
...: df.at[i.Index, 'Age'] = 100
...:
这似乎有效
In [64]: df
Out[64]:
Name Age
0 Alex 100
1 Bob 12
2 Clarke 13
问题在于,当使用较大的不同数据集时,请执行以下操作:
首先,我创建了一个名为likeNETELEMENT的新列,默认值为“”
我想用函数lookup\u netelement
返回的字符串替换默认值“”
df['NETELEMENT'] = ""
for i in df.itertuples():
df.at[i.Index, 'NETELEMENT'] = lookup_netelement(i.PEER_SRC_IP)
print( i, lookup_netelement(i.PEER_SRC_IP) )
但我得到的结果是:
Pandas(Index=769, SRC_AS='', DST_AS='', COMMS='', SRC_COMMS=nan, AS_PATH='', SRC_AS_PATH=nan, PREF='', SRC_PREF='0', MED='0', SRC_MED='0', PEER_SRC_AS='0', PEER_DST_AS='', PEER_SRC_IP='x.x.x.x', PEER_DST_IP='', IN_IFACE='', OUT_IFACE='', PROTOCOL='udp', TOS='0', BPS=35200.0, SRC_PREFIX='', DST_PREFIX='', NETELEMENT='', IN_IFNAME='', OUT_IFNAME='') routerX
这意味着它应该是:
NETELEMENT='routerX'
而不是NETELEMENT=''
你能告诉我我做错了什么吗
编辑:出于完整性考虑,查找\u网元
定义为
def lookup_netelement(ipaddr):
try:
x = LOOKUP['conn'].hget('ipaddr;{}'.format(ipaddr), 'dev') or b""
except:
logger.error('looking up `ipaddr` for netelement caused `{}`'.format(repr(e)), exc_info=True)
x = b""
x = x.decode("utf-8")
return x
希望您正在寻找有条件替换的位置,即
def wow(x):
return x ** 10
df['new'] = df['Age'].where(~(df['Name'] == 'Alex'),wow(df['Age']))
输出:
Name Age new
0 Alex 10 10000000000
1 Bob 12 12
2 Clarke 13 13
3 Alex 15 576650390625
编辑:对于发送两列的评论,请将lambda与轴1一起使用,即
def wow(x,y):
return '{} {}'.format(x,y)
df.apply(lambda x : wow(x['Name'],x['Age']),1)
你的例子错了吗?你的意思是如果i.Name==“Alex”:?确实,谢谢。复制粘贴错误:)什么是
lookup\u netelement
?是一个检索redis密钥中存储的值的函数。您是否尝试应用该函数,即df['new']=df['PEER\u SRC\u IP']。apply(lookup\u netelement)
谢谢@Bharath,但该操作必须是基于每个单元的操作,我猜你不是在寻找替代品。谢谢@Bharath。顺便说一句,你能建议如何用两个参数来概括这一点吗,例如df['IN_IFNAME']=df['NETELEMENT','IN_IFACE']]。应用(lookup_IFACE)
其中lookup_IFACE
包含两个参数:lookup_IFACE(dev,ifidx)
df['new'] = df['PEER_SRC_IP'].apply(lookup_netelement)
def wow(x,y):
return '{} {}'.format(x,y)
df.apply(lambda x : wow(x['Name'],x['Age']),1)