我正在编写一个代码,该代码读取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')
但是,当我这样做时,我总是得到一个空的数据集(好像代码找不到任何公共值),但是具有正确的列标题。
我该怎么做才能从这些值中去除撇号?
答案 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