首页 > 解决方案 > 如何根据另一列值更改列值?

问题描述

我正在尝试将 csv 文件中具有状态代码 ( state_cd) 的列值更改为状态名称 ( state_name)。这是我的两个 csv 文件和我的代码。

状态.csv

"state_name","state_cd"
"Alabama","AL"
"Alaska","AK"
"Arizona","AZ"
"Arkansas","AR"
"California","CA"
"Colorado","CO"
"Connecticut","CT"
"Delaware","DE"
"District of Columbia","DC"
"Florida","FL"
"Georgia","GA"
"Hawaii","HI"
"Idaho","ID"
"Illinois","IL"
"Indiana","IN"
"Iowa","IA"
"Kansas","KS"
"Kentucky","KY"
"Louisiana","LA"
"Maine","ME"
"Maryland","MD"
"Massachusetts","MA"
"Michigan","MI"
"Minnesota","MN"
"Mississippi","MS"
"Missouri","MO"
"Montana","MT"
"Nebraska","NE"
"Nevada","NV"
"New Hampshire","NH"
"New Jersey","NJ"
"New Mexico","NM"
"New York","NY"
"North Carolina","NC"
"North Dakota","ND"
"Ohio","OH"
"Oklahoma","OK"
"Oregon","OR"
"Pennsylvania","PA"
"Rhode Island","RI"
"South Carolina","SC"
"South Dakota","SD"
"Tennessee","TN"
"Texas","TX"
"Utah","UT"
"Vermont","VT"
"Virginia","VA"
"Washington","WA"
"West Virginia","WV"

学校.csv

"parent_category_nm","category_nm","place_name","address","city","state_cd"
"Schools","Elementary Schools","123 YOU N ME PRESCHOOL","809 W DETWEILLER DR STE A","PEORIA","IL"............................

代码.py

import pandas as pd

df1 = pd.read_csv("school.csv")

df2 = pd.read_csv("state.csv")

df3 = df1.merge(df2, left_on="state_cd", right_on="state_name", how="left")

我没有收到任何错误,但代码也没有做任何事情。预期的输出将是这样的,状态代码更改为状态名称。

"parent_category_nm","category_nm","place_name","address","city","state_cd"
"Schools","Elementary Schools","123 YOU N ME PRESCHOOL","809 W DETWEILLER DR STE A","PEORIA","Illinois"............................

有人能帮忙吗?

标签: pythonpandasdataframecsv

解决方案


你想做的是:

df3 = df1.merge(df2, on="state_cd", how="left")

这会将state_name列添加到您的学校数据框中。

如果要保留state_cd为具有完整名称的列:

 df1['state_cd'] = df1.state_cd.map(df2.set_index('state_cd').state_name)

推荐阅读