Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于其他列值填充列?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何基于其他列值填充列?

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

我有一个df,我想查询邮政编码以匹配地址和城市

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)