Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas-drop_副本未按预期工作_Python_Pandas_Python 2.7_Csv - Fatal编程技术网

Python pandas-drop_副本未按预期工作

Python pandas-drop_副本未按预期工作,python,pandas,python-2.7,csv,Python,Pandas,Python 2.7,Csv,根据中的回答,我试图从一个数据帧中删除另一个数据帧中存在的行 它适用于此输入: csv1: csv2: 代码: 这是预期的工作。但一旦在第一个csv中有更多的行,它就不起作用了 场景2在csv1中有额外的行 csv1: csv2: 代码: 请注意,它还将合并行中第二个副本的纬度值从38.48742更改为38.4874 我是这里遗漏了什么还是熊猫有错误?像@ayhan评论的那样,a数据帧是列纬度和经度之间的字符串,所以所有列都被转换为字符串 在另一个数据帧中,默认情况下列被转换为floats 一

根据中的回答,我试图从一个数据帧中删除另一个数据帧中存在的行

它适用于此输入:

csv1:

csv2:

代码:

这是预期的工作。但一旦在第一个csv中有更多的行,它就不起作用了


场景2在csv1中有额外的行

csv1:

csv2:

代码:

请注意,它还将合并行中第二个副本的纬度值从
38.48742
更改为
38.4874


我是这里遗漏了什么还是熊猫有错误?

像@ayhan评论的那样,
a
数据帧是列
纬度
经度
之间的字符串,所以所有列都被转换为字符串

在另一个数据帧中,默认情况下列被转换为
float
s

一种可能的解决方案是为
b
DataFrame使用
dtype
参数:

b = pd.read_csv('../test1.csv', escapechar='\\', dtype={'latitude':str, 'longitude':str})

df = pd.concat([a,b]).drop_duplicates(keep=False)
print (df)
                      sale_date   price    latitude     longitude
0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489
2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a
或用于
a
中的列:

a['latitude'] = pd.to_numeric(a['latitude'], errors='ignore')
a['longitude'] = pd.to_numeric(a['longitude'], errors='ignore')
df = pd.concat([a,b]).drop_duplicates(keep=False)
print (df)
                      sale_date   price    latitude     longitude
0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489
2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a

我现在无法运行python,但有趣的是,在
concat
b
latitude
被截断为
38.4874
。因此,它与早期版本的
38.48742
不匹配row@Jondiedoop是的,甚至我也注意到了这一点,并交叉检查了csv中的值。它确实是截断np.NaN==np.NaN是错误的,因此您可能可以用某个常量替换NaN值,然后执行drop\u duplicate操作……我想知道索引2的非数值是否与此有关。你能在所有情况下添加
latitude
列的
dtypes
吗?很好的捕获@Jondiedoop。这就是问题所在。谢谢你。有没有办法让每一列的数据类型都变成str?我真的不在乎dtypes@MohitC-然后使用
a=pd.read\u csv('../test.csv',escapechar='\\',dtype={'latitude':str,'longitude':str})
这就是我要问的,有没有办法将所有列的dtype指定为str作为单个参数?@MohitC-当然,使用
a=pd.read\u csv('../test.csv',escapechar='\\\',dtype=str)
>>> 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
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
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
b = pd.read_csv('../test1.csv', escapechar='\\', dtype={'latitude':str, 'longitude':str})

df = pd.concat([a,b]).drop_duplicates(keep=False)
print (df)
                      sale_date   price    latitude     longitude
0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489
2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a
a['latitude'] = pd.to_numeric(a['latitude'], errors='ignore')
a['longitude'] = pd.to_numeric(a['longitude'], errors='ignore')
df = pd.concat([a,b]).drop_duplicates(keep=False)
print (df)
                      sale_date   price    latitude     longitude
0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489
2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a