Python Pandas-pd.merge,添加检查以确保列不';不存在?
我有两个数据帧,一个是我使用的主数据帧,另一个是我想从中引入信息的辅助数据帧Python Pandas-pd.merge,添加检查以确保列不';不存在?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,一个是我使用的主数据帧,另一个是我想从中引入信息的辅助数据帧 df1(main)包含一个带有各种名称字符串的报告器列 df2(附加信息)包含报告者姓名及其位置 我想在df1中将location列添加为新列 我可以一次性完成以下工作: df1 = pd.merge(df1, df2, on='Reporter', how='left') 而且有效。 我的问题是我运行一个频繁更新的脚本(检查新行和检查旧行上的更新),并且重复运行这行代码会为每次执行添加多个列 仅检查列是否存在的问
df1
(main)包含一个带有各种名称字符串的报告器列
df2
(附加信息)包含报告者姓名及其位置
我想在df1
中将location列添加为新列
我可以一次性完成以下工作:
df1 = pd.merge(df1, df2, on='Reporter', how='left')
而且有效。
我的问题是我运行一个频繁更新的脚本(检查新行和检查旧行上的更新),并且重复运行这行代码会为每次执行添加多个列
- 仅检查列是否存在的问题是,可能已将新行(包含新报告器名称)添加到df中,我确实希望知道/更新其位置
- 我这样做对吗?或者我应该做一些dict查找,每次都有条件地映射位置吗?我怎样才能在熊猫身上做到这一点
- pd.merge的问题在于它总是在结果中添加后缀
不要使用它。
使用等效的
DataFrame.join
或DataFrame.merge
对正在进行左连接的数据帧进行合并
df1 = df1.join(df2, on='Reporter', how='left')
或者
公共列在结果中只保留一次。但是,这两个列之间的其他相同列(如果有)是重复的(带有后缀) 感谢您提供的信息coldspeed,但我选择了第二个选项,映射dict
reporter_dict = dict(zip(df2['Reporter'].astype(str),df2['Reporter Location']))
df['Reporter Location'] = df['Reporter'].astype(str).map(reporter_dict)
对于单个系列,我通常更喜欢映射一个系列,而不是
merge
或join
(如果使用正确,这两个选项也是有效的)
注意:我假设您已经将str
转换应用于所有列
s = df2.set_index('Reporter')['Reporter Location']
df['Reporter Location'] = df['Reporter'].map(s)
通常,不需要将序列转换为dict
,也不需要在pd.series
对象上使用zip
。使用zip
和numpy
数组
s = df2.set_index('Reporter')['Reporter Location']
df['Reporter Location'] = df['Reporter'].map(s)