【发布时间】:2019-09-06 07:07:45
【问题描述】:
根据here 的回答,我正在尝试从一个数据帧中删除其他数据帧中存在的行。
这个输入很好用:
csv1:
sale_date,price,latitude,longitude
Wed May 21 00:00:00 EDT 2008,141000,38.423251,-121.444489
Wed May 21 00:00:00 EDT 2008,146250,38.48742
csv2:
sale_date,price,latitude,longitude
Wed May 21 00:00:00 EDT 2008,146250,38.48742
代码:
>>> a = pd.read_csv('../test.csv', escapechar='\\')
>>> a
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 141000 38.423251 -121.444489
1 Wed May 21 00:00:00 EDT 2008 146250 38.487420 NaN
>>> b = pd.read_csv('../test1.csv', escapechar='\\')
>>> b
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 146250 38.48742 NaN
>>> pd.concat([a,b]).drop_duplicates(keep=False)
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 141000 38.423251 -121.444489
这是按预期工作的。但是一旦第一个 csv 中还有其他行,它就不起作用了。
场景 2 在 csv1 中有额外的行
csv1:
sale_date,price,latitude,longitude
Wed May 21 00:00:00 EDT 2008,141000,38.423251,-121.444489
Wed May 21 00:00:00 EDT 2008,146250,38.48742
Wed May 21 00:00:00 EDT 2008,147308,38.658246a,-121.375469a
csv2:
sale_date,price,latitude,longitude
Wed May 21 00:00:00 EDT 2008,146250,38.48742
代码:
>>> a = pd.read_csv('../test.csv', escapechar='\\')
>>> a
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 141000 38.423251 -121.444489
1 Wed May 21 00:00:00 EDT 2008 146250 38.48742 NaN
2 Wed May 21 00:00:00 EDT 2008 147308 38.658246a -121.375469a
>>> b = pd.read_csv('../test1.csv', escapechar='\\')
>>> b
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 146250 38.48742 NaN
>>> pd.concat([a,b]).drop_duplicates(keep=False)
sale_date price latitude longitude
0 Wed May 21 00:00:00 EDT 2008 141000 38.423251 -121.444489
1 Wed May 21 00:00:00 EDT 2008 146250 38.48742 NaN
2 Wed May 21 00:00:00 EDT 2008 147308 38.658246a -121.375469a
0 Wed May 21 00:00:00 EDT 2008 146250 38.4874 NaN
请注意,它还将合并行中第二个重复的纬度值从 38.48742 更改为 38.4874
我在这里遗漏了什么还是熊猫有错误?
【问题讨论】:
-
我现在无法运行python,但有趣的是,在
concat中,b的latitude被截断为38.4874。因此,它与前一行的38.48742不匹配 -
@Jondiedoop 是的,即使我注意到了这一点并交叉检查了 csv 中的值。它确实在截断
-
np.NaN == np.NaN 为 False,因此您可能可以将 NaN 值替换为某个常数,然后 drop_duplicate 可能会起作用...
-
我想知道索引 2 的非数字值是否与它有关。你能在所有情况下都添加
latitude列的dtypes吗? -
不错的收获@Jondiedoop。这就是问题所在。谢谢
标签: python pandas python-2.7 csv