Python 如何基于其他列值填充列?
我有一个df,我想查询邮政编码以匹配地址和城市Python 如何基于其他列值填充列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个df,我想查询邮政编码以匹配地址和城市 Postalcodestring 1181 1055 8547 我正在使用nomi.query\u邮政编码('n')进行此操作。因此,当输入以下内容时,显示下表: postal_code 1181 country_code NL place_name Amstelveen state_name Noord-Holland state_code
Postalcodestring
1181
1055
8547
我正在使用nomi.query\u邮政编码('n')进行此操作。因此,当输入以下内容时,显示下表:
postal_code 1181
country_code NL
place_name Amstelveen
state_name Noord-Holland
state_code 7
county_name Amstelveen
county_code 362
community_name NaN
community_code NaN
latitude 52.31
longitude 4.8631
accuracy 6
Name: 0, dtype: object
我想在“City1”和“Country1”列中填写城市和国家,以填写每行邮政编码。当postalcode为n/a时,我希望行City1和Country1也为n/a
我尝试了以下代码:
#NL
for i, row in df.iterrows():
df.loc[i, 'City1'] = nomi.query_postal_code(df['Postalcodestring'][i])[2]
#DE
for i, row in df.iterrows():
df.loc[i,'City2'] = nomi2.query_postal_code(df['Postalcodestring'][i])[2]
#NLCountry
for i, row in df.iterrows():
df.loc[i,['Country1']] = nomi.query_postal_code(df['Postalcodestring'][i])[1]
#DECountry
for i, row in df.iterrows():
df.loc[i,'Country2'] = nomi2.query_postal_code(df['Postalcodestring'][i])[1]
但是,获取以下错误:
ValueError Traceback (most recent call last)
<ipython-input-80-d0d96a6ea61b> in <module>
67 #NL
68 for i, row in df.iterrows():
---> 69 df.loc[i, 'City1'] = nomi.query_postal_code(df['Postalcodestring'][i])[2]
70 #DE
71 for i, row in df.iterrows():
ValueError: DataFrame constructor not properly called!
请帮忙 您应该使用
df。应用方法:
import pandas as pd
import pgeocode
df = pd.DataFrame({'Postalcodestring': ['1181', '1055', '8547']})
nomi = pgeocode.Nominatim('nl')
df['City1'] = df['Postalcodestring'].apply(lambda code: nomi.query_postal_code(code)['place_name'])
当您可以使用df[COL].apply将函数应用于列的每一行时,实际上不需要单独循环行。正如您在我的代码中看到的,您将函数作为参数传递给apply方法。在我的例子中,我使用lambda函数在同一个表达式中定义函数,但您也可以在外部显式定义函数:
def get_city(code):
return nomi.query_postal_code(code)['place_name']
df['City1'] = df['Postalcodestring'].apply(get_city)
请注意:不要混淆,因为我的代码不使用循环。当然,在多行上执行这样的操作需要循环。只是df.apply
在内部执行循环,所以您不需要自己执行
def get_city(code):
return nomi.query_postal_code(code)['place_name']
df['City1'] = df['Postalcodestring'].apply(get_city)