环顾四周,真的很难搞清楚这个。我想要 在一行代码片中并设置一个pandas DataFrame的多个单元格 达到相同的价值。
蓝色突出显示的部分是我想要设置的。
此工作要设置 - 但它只是一个值:
dframe2.ix[('virname1','int3', 'sysname1')]['Switchport_Voice_VLAN2'] = 'test'
这两种方法都有效,但未设置:
dframe2.iloc[dframe2.index.get_level_values(0) == 'virname1' ]['Switchport_Voice_VLAN2']
dframe2.iloc['virname1', slice(None), 'sysname1']['Switchport_Voice_VLAN2']
有人可以建议是否有更好的方法吗?
>>> dframe2
Switchport_Voice_VLAN Switchport_Voice_VLAN2
virname1 int1 sysname1 horses NaN
virname2 int2 sysname2 NaN horses
virname1 int2 sysname1 horses newval
int3 sysname1 horses test
int4 sysname1 horses newval
答案 0 :(得分:0)
使用df.loc
按标签选择行和/或列。
使用df.iloc
按顺序索引选择行和/或列。
df.ix
is deprecated,因此请避免使用它来验证您的代码。
在这种情况下,请使用df.loc
'virname1'
,'sysname1'
和'Switchport_Voice_VLAN2'
df = df.sort_index(axis=0)
都是标签。
另请注意,在切片MultiIndex时,index must be fully lexsorted:
df.loc
最后,使用df.loc[('virname1', slice(None), 'sysname1'), 'Switchport_Voice_VLAN2'] = 'test'
,您可以同时对行和列进行切片:
import numpy as np
import pandas as pd
index = pd.MultiIndex.from_arrays([
['virname{}'.format(i) for i in [1,2,1,1,1]],
['int{}'.format(i) for i in [1,2,2,3,4]],
['sysname{}'.format(i) for i in [1,2,1,1,1]]])
df = pd.DataFrame({'Switchport_Voice_VLAN':['horses',np.nan,'horses','horses','horses'],
'Switchport_Voice_VLAN2':[np.nan,'horses','newval','test','newval']},
index=index)
df = df.sort_index(axis=0)
df.loc[('virname1', slice(None), 'sysname1'), 'Switchport_Voice_VLAN2'] = 'test'
print(df)
例如,
Switchport_Voice_VLAN Switchport_Voice_VLAN2
virname1 int1 sysname1 horses test
int2 sysname1 horses test
int3 sysname1 horses test
int4 sysname1 horses test
virname2 int2 sysname2 NaN horses
产量
@bot.command()
async def randomimage(*args):
"""Displays a random image of said thing"""
q = ''
for arg in enumerate(args):
q += urllib.parse.quote(arg) + '+'
f = urllib2.urlopen('http://ajax.googleapis.com/ajax/services/search/images?q=' + q + '&v=1.0&rsz=large&start=1')
data = json.load(f)
f.close()