Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Pandas_Dataframe - Fatal编程技术网

在Python数据帧中查找?

在Python数据帧中查找?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据帧df1: Month 1 3 March April 2 4 5 我有另一个数据帧df2: Month Name 1 January 2 February 3 March 4 April 5 May 如果我想用df2中相应的名称替换df1的整数值,我可以使用什么样的查找函数 我想以此作为我的df1: Month January March March April February May 一种替代方法

我有一个数据帧df1:

Month

1
3
March
April
2
4
5
我有另一个数据帧df2:

Month  Name

1       January
2       February
3       March
4       April
5       May
如果我想用df2中相应的名称替换df1的整数值,我可以使用什么样的查找函数

我想以此作为我的df1:

    Month

January
March
March
April
February
May
一种替代方法是与函数一起使用:

def repl(x, lookup=dict(zip(df2.Month.astype(str), df2.Name))):
    return lookup.get(x, x)

df['Month'] = df['Month'].map(repl)
print(df)
输出

替换它

你可以使用和然后。只需小心将字符串映射到字符串,或者像这里一样,将数字映射到数字:

month_name = df2.set_index('Month')['Name']

df1['Month'] = pd.to_numeric(df1['Month'], errors='coerce').map(month_name)\
                 .fillna(df1['Month'])

print(df1)

      Month
0   January
1     March
2     March
3     April
4  February
5     April
6       May
您也可以使用,但这是。

将地图与系列一起使用,只需确保您的数据类型匹配:

mapper = df2.set_index(df2['Month'].astype(str))['Name']
df1['Month'].map(mapper).fillna(df1['Month'])
输出:

0     January
1       March
2       March
3       April
4    February
5       April
6         May
Name: Month, dtype: object

如果它们的顺序如示例所示,为什么不简单地使用df1['Month']=df2['Name']呢?它们的顺序不同。刚刚做了编辑。谢谢我试过了df1=df1.replacedictzipdf2.Month.astypestr,df2.Name,但它不起作用。当我打印df1时,我得到原始值。
mapper = df2.set_index(df2['Month'].astype(str))['Name']
df1['Month'].map(mapper).fillna(df1['Month'])
0     January
1       March
2       March
3       April
4    February
5       April
6         May
Name: Month, dtype: object