无法提取和合并共享同一列的两个数据集

时间:2019-06-10 15:59:43

标签: python python-3.x pandas dataframe

我正在编写一个代码,该代码读取2个CSV作为数据帧(它们共享一个公共列),并通过比较该列来合并它们。一种CSV包含约94,000行,另一种CSV具有约40,000行(在较大的数据集中,公共列存在重复的行,因此,请务必保留这些重复的行)。

两个数据集都具有要合并的相同列名,但我认为当前合并失败,因为一个数据集添加了不允许在共享列之间进行比较的字符。我已经尝试了许多不同的方法来提取这些字符,但是到目前为止没有任何效果。当我得到结果合并数据帧时,它完全是空的。

假设我有两个像这样的数据集:

数据集1:

注意:数据集2的ID列实际上是由字符串组成的,但是撇号在打印中不会出现,我想在此进行说明。

import pandas as pd 
data = {'A':[4, 4, 4], 'B': ['foo', 'bar', 'foo'], 'ID':['111', '222', '333']}
df1 = pd.DataFrame(data)

数据集2:

data2 = {'C':[3, 3, 3], 'D': ['a', 'b', 'c'], 'ID':[111, 222, 333]}
df2 = pd.DataFrame(data2)

如何去除撇号的数据集1?

到目前为止,我尝试过的事情是:

1)将共享列转换为字符串(上面的结果)     将熊猫作为pd导入

df1 = pd.read_csv('Data1.csv', index_col = [0])
df2 = pd.read_csv('Data2.csv', index_col = [0])
df2['ID'] = df2['ID'].apply(str) (this did not give me the apostrophes at the ends) 

2)剥离'

的df1中的字符串
for x in range(0, len(df1['ID']):
    df1.iloc[x]['ID'] = df1.iloc[x]['ID'].strip(')

3)在df2中添加撇号

for x in range(0, len(df2['ID']):
    df2.iloc[x]['ID'] = "'" + df2.iloc[x]['ID'] + "'"

4)将df1移到Google表格中,并使用Power Tools从该列中删除“(这是可行的,但我无法在较大的数据集中使用它”)

我尝试过的所有代码都无法消除撇号。

然后我像这样合并:

df3 = df1.merge(df2, on=['ID'])

df3.to_csv('Dataset3'.csv')

但是,当我这样做时,我总是得到一个空的数据集(好像代码找不到任何公共值),但是具有正确的列标题。

我该怎么做才能从这些值中去除撇号?

1 个答案:

答案 0 :(得分:0)

我能够在我的计算机上运行此代码以删除撇号:

data = {'A':[4, 4, 4], 'B': ['foo', 'bar', 'foo'], 'ID':["'111'", "'222'", "'333'"]}
# note I added apostrophes into the elements in ID

df1 = pd.DataFrame(data)
for x in df1.ID:
    x = x.replace("'", "")
    x = int(x)
    print (x) # x is now an int