我目前正在使用Dataframe上的pandas,在读取csv文件并将特定列转换为str之后,pandas似乎将此行的所有重复项转换为NaN。
bla = pd.read_csv(bla_path, sep=',',converters={'order_id':str})
它给了我这个结果:
internal_conversion_id order_id conversion_target_id \
0 85 9222 67
1 20 9224 65
2 20 NaN 65
3 20 NaN 65
4 33 9233 67
5 33 NaN 67
有人知道我错过了什么吗?原始文件确实包含重复项。
编辑:我刚检查过 - 当我不使用converters
时,也会发生这种情况。
编辑2:这里有来自原始csv的一些行:
internal_conversion_id,order_id,conversion_target_id,product_nr
85,9222,67,1
20,9224,65,1
20,9224,65,2
20,9224,65,3
33,9223,67,1
33,9223,67,2
EDIT3:
好吧,我想我找到了消息来源。在代码中的某个时刻,我想创建一个第二个变量,其内容与第一个相同,但没有重复。 Pandas也会删除第一个变量中的所有重复项。我怎么能阻止熊猫呢?
这是一段代码:
bla2 = bla
bla2['order_id'] = bla2['order_id'].drop_duplicates()
bla2 = bla2[pd.notnull(bla2['order_id'])]
答案 0 :(得分:1)
如果你想删除重复项,你可以这样做:
bla2 = bla2.drop_duplicates(subset='order_id')
您所做的是通过执行以下操作覆盖该列的drop_duplicates
返回结果:
bla2['order_id'] = bla2['order_id'].drop_duplicates()
那时你引入了NaN
,其中值是重复的:
In [3]:
df['order_id'].drop_duplicates()
Out[3]:
0 9222
1 9224
4 9223
Name: order_id, dtype: int64
In [4]:
df['order_id'] = df['order_id'].drop_duplicates()
df
Out[4]:
internal_conversion_id order_id conversion_target_id product_nr
0 85 9222 67 1
1 20 9224 65 1
2 20 NaN 65 2
3 20 NaN 65 3
4 33 9223 67 1
5 33 NaN 67 2
但是,您的最后一行代码应该有效:
In [5]:
df = df[pd.notnull(df['order_id'])]
df
Out[5]:
internal_conversion_id order_id conversion_target_id product_nr
0 85 9222 67 1
1 20 9224 65 1
4 33 9223 67 1
所以我不知道你是否感到困惑
修改强>
如果你想制作副本,那就复制一下:
bla2 = bla.copy()
然后你可以用bla2
做任何你想做的事情,它不会影响bla
或者您从bla2
:
bla.drop_duplicates
bla2 = bla.drop_duplicates(subset='order_id')