如何根据熊猫数据框中的非连续索引列表替换值?

时间:2018-07-05 07:52:45

标签: python pandas replace

我一直在寻找一种快速有效的方法来替换熊猫数据框给定列中的值,前提是相应的索引属于非连续数字列表。 用ca表示non_consecutive_indices_list = [1400,6571,14526,68420,...] 30k不同的值。

  1. 我尝试使用.iloc,但收到错误消息:

            <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Notes"
            android:layout_column="1"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=":"
            android:layout_column="2"/>
    
        <TextView
            android:id="@+id/txt_notes"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_column="3"
            android:singleLine="false"
            android:layout_weight="1"
            android:maxLines="4"/>
    
    </TableRow>
    

ValueError:只能按位置使用[整数,整数切片(起始点为INCLUDED,结束点为EXCLUDED),整数形式的列表,布尔数组]进行索引。

  1. 或者,我尝试了以下方法:

    df.iloc[non_consecutive_indices_list, 'column'] = New_Value
    

但这会返回原始数据帧的副本,因此我无法替换原始值。

  1. 最后,我尝试使用一个for循环,该循环可以工作,但是效率很低,并且永远需要大约30k的值来替换:

    df.iloc[non_consecutive_indices_list].column = New_Value
    

有什么想法可以最快的方式完成吗?

1 个答案:

答案 0 :(得分:2)

iloc更改为DataFrame.loc功能:

df = pd.DataFrame({'column':list('abcdefghij')})

non_consecutive_indices_list = [2,4,1,6]
df.loc[non_consecutive_indices_list, 'column'] = 'New_Value'
print (df)
      column
0          a
1  New_Value
2  New_Value
3          d
4  New_Value
5          f
6  New_Value
7          h
8          i
9          j