我的数据框的格式为:
import pandas as pd
df = pd.DataFrame(None,columns= ['Name','Age','Asset'])
df = df.append({'Name':'John','Age':10,'Asset':'Bike'},ignore_index=True)
df = df.append({'Name':'Sarah','Age':17,'Asset':'Laptop'},ignore_index=True)
df = df.append({'Name':'Noah','Age':14,'Asset':'Book'},ignore_index=True)
df
Name Age Asset
0 John 10 Bike
1 Sarah 17 Laptop
2 Noah 14 Book
现在,我想读一本字典{'Name' :'John','Age':11,'Asset' :'Phone'}
,找到名称为John的df行,将age更改为11,并将Asset更改为“ Phone”。假设数据框的每一列都是字典中的键。
由于iloc检索了一行,我认为这行得通,
df.loc[df['Name'] == 'John'] = {'Name' :'John','Age':11,'Asset' :'Phone'}
但是,这不起作用,您需要使用列表进行更新。
用字典更新数据框行的有效方法是什么?
答案 0 :(得分:1)
我认为您不只是要对John做出更改?但是对于任何字典?
让我们设置您提供的字典
di = {'Name' :'John','Age':11,'Asset' :'Phone'}
然后,我们可以使用.loc按“名称”行进行过滤,并选择“年龄”和“资产”列,然后从字典中设置值。
df.loc[df['Name'] == di['Name'], ['Age', 'Asset']] = [di['Age'], di['Asset']]
print(df)
Name Age Asset
0 John 11 Phone
1 Sarah 17 Laptop
2 Noah 14 Book
答案 1 :(得分:1)
您可以将索引设置为“名称”,然后调用df.update()
以引用匹配的索引来更新数据框。最后.reset_index()
将索引重置为列:
d={'Name' :'John','Age':11,'Asset' :'Phone'}
d_=pd.DataFrame().from_dict(d,'index').T
m_=df.set_index('Name')
m_.update(d_)
df=m_.reset_index()
Name Age Asset
0 John 11 Phone
1 Sarah 17 Laptop
2 Noah 14 Book
答案 2 :(得分:1)
您可以将dict.values()
直接分配给要由.loc
修改的切片,如下所示( 注意 :这适用于Python 3.5+因为插入顺序可以保证d
的顺序。在Python <3.5上,您需要使用collections.OrderedDict
):
d = {'Name' :'John','Age':11,'Asset' :'Phone'}
df.loc[df.Name.eq(d['Name']), :] = list(d.values())
Out[643]:
Name Age Asset
0 John 11 Phone
1 Sarah 17 Laptop
2 Noah 14 Book