Pandas从另一个 Dataframe 中获取数据

iszxjhcz  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(144)

我尝试将数据从一个Map表的数据框带到另一个数据框,但是我得到一个错误“x”没有定义,我做错了什么?
请注意,对于Map表中没有的值(中国/CN),我只希望该值为空或nan。如果Map表中有我的数据中没有的值-我不希望包括它们。

import pandas as pd

languages = {'Language': ["English", "German", "French", "Spanish"],
            'countryCode': ["EN", "DE", "FR", "ES"]
            }

countries = {'Country': ["Australia", "Argentina", "Mexico", "Algeria", "China"],
             'countryCode': ["EN", "ES", "ES", "FR", "CN"]
            }

language_map = pd.DataFrame(languages)
data = pd.DataFrame(countries)

def language_converter(x):
    return language_map.query(f"countryCode=='{x}'")['Language'].values[0]

data['Language'] = data['countryCode'].apply(language_converter(x))
cwtwac6a

cwtwac6a1#

使用pandas.DataFrame.merge

data.merge(language_map, how='left')

输出:

Country countryCode Language
0  Australia          EN  English
1  Argentina          ES  Spanish
2     Mexico          ES  Spanish
3    Algeria          FR   French
4      China          CN      NaN
f0ofjuux

f0ofjuux2#

.apply接受一个可调用对象,但您传递的language_converter(x)已经是一个带有未定义x变量的函数调用,因为apply尚未 * applied *。
有效用法为:.apply(language_converter).
但是接下来,您将遇到另一个错误IndexError: index 0 is out of bounds for axis 0 with size 0,因为可能找不到某些国家代码(这会破坏索引.values[0])。
如果继续您的起始方法,有效版本将如下所示:

def language_converter(x):
    lang = language_map[language_map["countryCode"] == x]['Language'].values
    return lang[0] if lang.size > 0 else np.nan

data['Language'] = data['countryCode'].apply(language_converter)
print(data)
Country countryCode Language
0  Australia          EN  English
1  Argentina          ES  Spanish
2     Mexico          ES  Spanish
3    Algeria          FR   French
4      China          CN      NaN
    • 但是**,与定义和应用language_converter不同,显式Map国家/地区代码要简单直接得多,只需:
data['Language'] = data['countryCode'].map(language_map.set_index("countryCode")['Language'])

相关问题