Python 3.x 如何替换数据帧中的单元格

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": ..

形成下面的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": 
    ...:         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)