mar*_*rio 3 python dataframe pandas
假设我有一个名为df的数据框,如下所示:
Id Place
1 NY
2 Berlin
3 Paris
4 Paris
5 Berlin
Run Code Online (Sandbox Code Playgroud)
还有一个字典,它以 ID 为键,以位置为值,如下所示:
id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}
Run Code Online (Sandbox Code Playgroud)
我想遍历数据帧的每一行,看看 ID 是否包含在id_to_place字典中。如果是这样,那么我想用字典值替换该行的列Place。例如,在 runninh 之后,我希望输出的代码是:
Id Place
1 Berlin
2 Berlin
3 NY
4 Paris
5 Berlin
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过这段代码:
id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}
for index,row in df.iterrows():
id = row['id']
place = row['place']
for item in id_to_place:
if item == str(id):
df.loc[df.id =id,'place'] = id_to_place[item]
print(df)
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时,数据框保持不变。有没有人知道为什么会发生这种情况?我感谢任何帮助!
使用Series.map方法为更换匹配的值,然后替换NaN由原始列S Series.fillna:
df['Place'] = df['Id'].map(id_to_place).fillna(df['Place'])
print (df)
Id Place
0 1 Berlin
1 2 Berlin
2 3 NY
3 4 Paris
4 5 Berlin
Run Code Online (Sandbox Code Playgroud)
小智 3
您当前的方法不起作用,因为字典中的项目是整数,并且您正在对照 str(id) 检查它们,它总是返回 False。如果您删除 str 并仅根据 id 检查项目,那么它就可以工作。
id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}
for index,row in df.iterrows():
id = row['id']
place = row['place']
for item in id_to_place:
if item == id: # this line changed
df.loc[df.id =id,'place'] = id_to_place[item]
print(df)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5759 次 |
| 最近记录: |