我希望这还没有发布,我没有找到任何帮助我的东西。所以我有这个数据框df
Id Numero Voie CodePostal Commune \
1 940010005V-59 59 Rue d'Ablon 94480 Ablon-sur-Seine
2 940010005V-61 61 Rue d'Ablon 94480 Ablon-sur-Seine
3 940010005V-65 65 Rue d'Ablon 94480 Ablon-sur-Seine
Source Latitude Longitude \
1 C+O 48.721350 2.414291
2 C+O 48.722434 2.413538
3 OSM 48.721141 2.415030
Adresse AdresseGPS LatitudeGPS \
1 59 Rue d'Ablon, Ablon-sur-Seine, France 0.0
2 61 Rue d'Ablon, Ablon-sur-Seine, France 0.0
3 65 Rue d'Ablon, Ablon-sur-Seine, France 0.0
LongitudeGPS
1 0.0
2 0.0
3 0.0
我是从csv导入的,并使用
添加了最后三列df = df.assign(AdresseGPS="",LatitudeGPS = 0.,LongitudeGPS = 0.)
我想要做的是使用函数
修改最后三列def funcRow(dataIn):
dataOut = dataIn
dataOut['AdresseGPS'] = 't'
dataOut['LatitudeGPS'] = 1
return(dataOut)
但是当我这样做时
df.ix[1,] = funcRow(df.ix[1,])
我收到以下错误:IndexError:元组索引超出范围
我打印了两个
df.ix[1,] & funcRow(df.ix[1,])
我得到以下内容:
print df.ix[1,]
Id 940010005V-59
Numero 59
Voie Rue d'Ablon
CodePostal 94480
Commune Ablon-sur-Seine
Source C+O
Latitude 48.7214
Longitude 2.41429
Adresse 59 Rue d'Ablon, Ablon-sur-Seine, France
AdresseGPS
LatitudeGPS 0
LongitudeGPS 0
Name: 1, dtype: object
print funcRow
Id 940010005V-59
Numero 59
Voie Rue d'Ablon
CodePostal 94480
Commune Ablon-sur-Seine
Source C+O
Latitude 48.7214
Longitude 2.41429
Adresse 59 Rue d'Ablon, Ablon-sur-Seine, France
AdresseGPS t
LatitudeGPS 1
LongitudeGPS 0
Name: 1, dtype: object
我很擅长在Python中使用数据框,所以我提供了很多细节,不确定一切是否相关。我尝试使用其他函数,如loc或iloc而不是ix,但仍然得到相同的错误。 任何建议都会非常受欢迎:)
答案 0 :(得分:1)
我认为解决这个问题的“最安全”方法是.loc []而不是.ix []。
试试这个:
def funcRow(dataIn):
dataOut = dataIn
dataOut['AdresseGPS'] = 't'
dataOut['LatitudeGPS'] = 1
return(dataOut)
df.loc[1,:] = funcRow(df.loc[1,:])
(如果你不习惯.loc []:第一个参数是行选择,第二个参数是列选择,并且给出“:”表示你选择全部)。
当我运行上面的代码时,我收到一条警告消息,但如果我打印df,它会返回更新的数据帧。
(奖励:这篇博文在学习loc,iloc和ix时是一个很好的参考:http://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/)
答案 1 :(得分:0)
根据文件,
.ix []支持基于混合整数和标签的访问。它主要基于标签,但将回退到整数位置访问,除非相应的轴是整数类型。
我认为您想要访问整个数据帧值的最后三列。
如果是,你可以试试,
df.ix[:] = funcRow(df.ix[:]) #for whole rows
或
df.ix[start:end]=funcRow(df.ix[start:end]) #for specific rows
或者如果您只想访问特定行,则可以使用此
df.ix[n] = funcRow(df.ix[n])
我希望它可以帮助您解决问题。
答案 2 :(得分:0)
这应该有效:
df.ix[1] = funcRow(df.ix[1,])
我可能需要查看源代码,看看为什么以下内容不起作用:
df.ix[1,] = funcRow(df.ix[1,])