在python过滤器中编辑数据并将其应用于原始数据帧
我试图弄清楚如何过滤熊猫中的数据,然后为满足过滤条件的项目为列中的所有行分配一个值,并使其影响原始数据框。 这是我迄今为止最接近的一次尝试,但它发出了许多信息性警告:在python过滤器中编辑数据并将其应用于原始数据帧,python,pandas,filter,Python,Pandas,Filter,我试图弄清楚如何过滤熊猫中的数据,然后为满足过滤条件的项目为列中的所有行分配一个值,并使其影响原始数据框。 这是我迄今为止最接近的一次尝试,但它发出了许多信息性警告: 将熊猫作为pd导入 df=pd.read\u csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv') df['Zone']=' 分区1=df[(df[‘纬度’]>0)和(df[‘纬度’]>0)] 分区2=df[(df[‘
将熊猫作为pd导入
df=pd.read\u csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv')
df['Zone']='
分区1=df[(df[‘纬度’]>0)和(df[‘纬度’]>0)]
分区2=df[(df[‘纬度’]<0)和(df[‘纬度’]>0)]
区域3=df[(df[‘纬度’]>0)和(df[‘纬度’]<0)]
分区4=df[(df[‘纬度’]<0)和(df[‘纬度’]<0)]
zone1[['Zone']]=zone1[['Zone']]=1
分区2[['Zone']]=zone1[['Zone']]=2
分区3[['Zone']]=zone1[['Zone']]=3
分区4[['Zone']]=zone1[['Zone']]=4
df
这完全不会影响原始数据帧,但会设置过滤子集中的值
我假设我可能需要过滤掉符合我的每个过滤器的所有内容,并将其从原始文件中删除,然后将更改连接回原始文件
这是一个随机数据集,用于说明我希望执行的操作,但我的实际数据集包含不符合任何筛选条件的数据,我需要将这些数据保持为未知数据,因为我不会像本例中那样使用所有行
我试图避免循环每一行,并检查每一行的标准,所以如果有人知道我如何可以做到这一点,我将不胜感激 您没有注意到这两个条件都在检查纬度,您应该检查
.loc
,以便了解如何以正确的方式更改部分数据帧中的值
import pandas as pd
df = pd.read_csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv')
df['Zone'] = ''
zone1 = (df['Latitude'] > 0) & (df['Longitude'] > 0)
zone2 = (df['Latitude'] < 0) & (df['Longitude'] > 0)
zone3 = (df['Latitude'] > 0) & (df['Longitude'] < 0)
zone4 = (df['Latitude'] < 0) & (df['Longitude'] < 0)
df.loc[zone1, 'Zone'] = 1
df.loc[zone2, 'Zone'] = 2
df.loc[zone3, 'Zone'] = 3
df.loc[zone4, 'Zone'] = 4
df
将熊猫作为pd导入
df=pd.read\u csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv')
df['Zone']='
1区=(df[‘纬度’]>0)和(df[‘经度’]>0)
分区2=(df[‘纬度’]<0)和(df[‘经度’]>0)
区域3=(df[‘纬度’]>0)和(df[‘经度’]<0)
分区4=(df[‘纬度’]<0)和(df[‘经度’]<0)
df.loc[区域1,'区域']=1
df.loc[zone2,'Zone']=2
df.loc[zone3,'Zone']=3
df.loc[zone4,'Zone']=4
df
IIUC,您是否正在尝试这样做:
zone1 = (df['Latitude'] > 0) & (df['Longitude'] > 0)
zone2 = (df['Latitude'] < 0) & (df['Longitude'] > 0)
zone3 = (df['Latitude'] > 0) & (df['Longitude'] < 0)
zone4 = (df['Latitude'] < 0) & (df['Longitude'] < 0)
df['Zone'] = np.select([zone1,zone2,zone3,zone3],['Zone 1','Zone 2', 'Zone 3','Zone 4'])
应该是
df['Latitude']>0&df['Longitude']>0
而不是Latitude&Latitude吗?是的,我很抱歉,它运行了,所以我觉得很好。我尝试过使用.loc来解决这种情况,但它似乎需要在每一行上迭代,所以我在寻找更好的方法。纬度与情况和我试图完成的任务无关。.loc
是唯一推荐的将值分配给数据帧部分的方法,如果您需要迭代行,则可能是做错了。别相信我的话,读文件吧。至于你是如何提出你的问题的,纬度无关毫无意义。我想我只是不明白。我已经阅读了文档,并尝试了一整天,我发现没有办法修改行列表或任何批量操作。对我来说,它似乎只是为了编辑一个字段。是的!这就是我想要做的!
Transaction_date Product Price Payment_Type Name \
0 1/2/09 6:17 Product1 1200 Mastercard carolina
1 1/2/09 4:53 Product1 1200 Visa Betina
2 1/2/09 13:08 Product1 1200 Mastercard Federica e Andrea
3 1/3/09 14:44 Product1 1200 Visa Gouya
4 1/4/09 12:56 Product2 3600 Visa Gerd W
City State Country Account_Created \
0 Basildon England United Kingdom 1/2/09 6:00
1 Parkville MO United States 1/2/09 4:42
2 Astoria OR United States 1/1/09 16:21
3 Echuca Victoria Australia 9/25/05 21:13
4 Cahaba Heights AL United States 11/15/08 15:47
Last_Login Latitude Longitude Zone
0 1/2/09 6:08 51.500000 -1.116667 Zone 3
1 1/2/09 7:49 39.195000 -94.681940 Zone 3
2 1/3/09 12:32 46.188060 -123.830000 Zone 3
3 1/3/09 14:22 -36.133333 144.750000 Zone 2
4 1/4/09 12:45 33.520560 -86.802500 Zone 3