修改数据帧行

2024-09-30 18:18:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望这还没有被张贴,我还没有找到任何帮助我。所以我有这个数据框

              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,])

我得到以下错误:索引器错误:元组索引超出范围

我都印了

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,但仍然得到相同的错误。 任何建议都非常欢迎:)


Tags: iddfixfranceruesurnumeroseine
3条回答

我认为解决这个问题的“最安全”方法是使用.loc[]而不是.ix[]。你知道吗

试试这个:

def funcRow(dataIn):
    dataOut = dataIn
    dataOut['AdresseGPS'] = 't'
    dataOut['LatitudeGPS'] = 1
    return(dataOut)

df.loc[1,:] = funcRow(df.loc[1,:])

(如果您不习惯.loc[]:第一个参数是行选择,第二个参数是列选择,giving“:”表示您选择了全部)。你知道吗

当我运行上面的代码时,我得到一条警告消息,但是如果我打印df,它会返回更新的数据帧。你知道吗

(另一个好处是:这篇博文是学习loc、iloc和ix:http://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/的绝佳参考)

这应该起作用:

df.ix[1] = funcRow(df.ix[1,])

我可能需要看一下源代码,看看为什么下面的代码不起作用:

df.ix[1,] = funcRow(df.ix[1,])

根据文件

.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])

我希望它能帮助你解决你的问题。你知道吗

相关问题 更多 >