Python:合并熊猫数据帧只会导致列中出现NaN

Python:合并熊猫数据帧只会导致列中出现NaN,python,python-3.x,pandas,dataframe,bigdata,Python,Python 3.x,Pandas,Dataframe,Bigdata,我目前正在从事一个大数据项目,该项目要求将多个文件合并到一个可以通过SAS进行分析的表中。大部分工作都已完成,需要将最终事实表添加到最终输出中 我在尝试将事实表合并到最终输出时遇到了一个障碍。此csv文件已加载到其自己的数据帧中,其中包含以下列 table name: POP year | Borough | Population 在数据集中,这些字段与其他大约26个字段一起存在。首次尝试通过以下行合并时: #Output = pd.merge(Output, POP, on=['year',

我目前正在从事一个大数据项目,该项目要求将多个文件合并到一个可以通过SAS进行分析的表中。大部分工作都已完成,需要将最终事实表添加到最终输出中

我在尝试将事实表合并到最终输出时遇到了一个障碍。此csv文件已加载到其自己的数据帧中,其中包含以下列

table name: POP
year | Borough | Population
在数据集中,这些字段与其他大约26个字段一起存在。首次尝试通过以下行合并时:

#Output = pd.merge(Output, POP, on=['year', 'Borough'], how='outer')
返回了以下错误

ValueError:您正在尝试合并object和int64列。如果 如果要继续,请使用pd.concat

我理解这只是数据类型不匹配,因此在merge命令之前添加了以下行:

POP['year'] = POP['year'].astype(object)
这样做允许“成功”执行程序,但是,输出文件有“填充”列,但在POP表中的“年”和“自治区”组合匹配的每一行应有适当的填充时,输出文件将填充NaN

如果您能提供任何帮助,我们将不胜感激,我将在下面为您提供更完整的代码摘录,以方便您进行分析:

import pandas as pd


#
# Add Population Data
#

#rename columns for easier joining
POP.rename(columns={"Area name":"Borough"}, inplace=True)
POP.rename(columns={"Persons":"Population"}, inplace=True)
POP.rename(columns={"Year":"year"}, inplace=True)

#convert type of output column to allow join
POP['year'] = POP['year'].astype(object)


#add to output file
Output = pd.merge(Output, POP, on=['year', 'Borough'], how='outer')
此外,还可以在下面找到一些有关数据类型和形状的信息,这些数据类型和形状与所使用的项目和表格有关:

> Output table info
> 
> <class 'pandas.core.frame.DataFrame'> Int64Index: 34241 entries, 0 to
> 38179 Data columns (total 2 columns): year       34241 non-null object
> Borough    34241 non-null object dtypes: object(2) memory usage:
> 535.0+ KB None table shape: (34241, 36)
> ----------
> 
> POP table info <class 'pandas.core.frame.DataFrame'> RangeIndex: 357
> entries, 0 to 356 Data columns (total 3 columns): year          357
> non-null object Borough       357 non-null object Population    357
> non-null object dtypes: object(3) memory usage: 4.2+ KB None table
> shape: (357, 3)
这是人口数据框

   year               Borough Population
0  2010  Barking and Dagenham   182,838 
1  2011  Barking and Dagenham   187,029 
2  2012  Barking and Dagenham   190,560 
编辑(2):
因此,这似乎是一个日期类型问题,但我仍然不能完全确定为什么,因为我曾试图重铸数据类型。然而,最终让我采取的解决方案是将输出数据帧保存为csv并重新加载到程序中,从那里开始合并再次工作

你能提供一小段示例数据吗?在连接之前,可能在数据帧上使用
head
,只是添加了一个.head(3)sameple它到原始问题中看看你的源,数据可能有尾随空格,这会阻止它们合并到正确的记录中。谢谢,我检查过了,但看起来还可以。然而,我只是设法解决了这个问题。我不是100%确定问题是什么,但我决定将DF导出为csv并重新加载,这似乎解决了类型冲突,并允许再次合并表。我不能100%确定为什么会出现这种情况,因为我以前尝试过重新计算数据类型,但现在一切都正常了,尽管有点混乱,谢天谢地,只有我需要这个输出。你能提供一小段示例数据吗?在连接之前,可能在数据帧上使用
head
,只是添加了一个.head(3)sameple它到原始问题中看看你的源,数据可能有尾随空格,这会阻止它们合并到正确的记录中。谢谢,我检查过了,但看起来还可以。然而,我只是设法解决了这个问题。我不是100%确定问题是什么,但我决定将DF导出为csv并重新加载,这似乎解决了类型冲突,并允许再次合并表。我不能100%确定为什么会出现这种情况,因为我以前曾尝试过重铸数据类型,但现在一切都正常,尽管有点混乱,谢天谢地,只有我需要这种输出。
   year               Borough Population
0  2010  Barking and Dagenham   182,838 
1  2011  Barking and Dagenham   187,029 
2  2012  Barking and Dagenham   190,560