繁体   English   中英

使用 iloc 为 pandas DataFrame 中的特定单元格设置值

[英]Set value for particular cell in pandas DataFrame with iloc

我有一个类似于thisthis 的问题 不同之处在于我必须按位置选择行,因为我不知道索引。

我想做一些类似df.iloc[0, 'COL_NAME'] = x事情,但 iloc 不允许这种访问。 如果我执行df.iloc[0]['COL_NAME'] = x ,则会出现关于链式索引的警告。

对于混合位置和索引,请使用.ix 但是你需要确保你的索引不是整数,否则会引起混淆。

df.ix[0, 'COL_NAME'] = x

更新:

或者,尝试

df.iloc[0, df.columns.get_loc('COL_NAME')] = x

例子:

import pandas as pd
import numpy as np

# your data
# ========================
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 2), columns=['col1', 'col2'], index=np.random.randint(1,100,10)).sort_index()

print(df)


      col1    col2
10  1.7641  0.4002
24  0.1440  1.4543
29  0.3131 -0.8541
32  0.9501 -0.1514
33  1.8676 -0.9773
36  0.7610  0.1217
56  1.4941 -0.2052
58  0.9787  2.2409
75 -0.1032  0.4106
76  0.4439  0.3337

# .iloc with get_loc
# ===================================
df.iloc[0, df.columns.get_loc('col2')] = 100

df

      col1      col2
10  1.7641  100.0000
24  0.1440    1.4543
29  0.3131   -0.8541
32  0.9501   -0.1514
33  1.8676   -0.9773
36  0.7610    0.1217
56  1.4941   -0.2052
58  0.9787    2.2409
75 -0.1032    0.4106
76  0.4439    0.3337

我要在这里添加的一件事是数据帧上的at函数要快得多,特别是如果您正在对单个(不是切片)值进行大量分配。

df.at[index, 'col_name'] = x

根据我的经验,我获得了 20 倍的加速。 是一篇西班牙文的文章,但仍然给人一种对正在发生的事情的印象。

如果您知道位置,为什么不直接从中获取索引?

然后使用.loc

df.loc[index, 'COL_NAME'] = x

您可以使用:

df.set_value('Row_index', 'Column_name', value)

set_valye.ix方法快约 100 倍。 最好使用df['Row_index']['Column_name'] = value

但由于set_value弃用现在这么.iat / .at是好的替代品。

例如,如果我们有这个 data_frame

   A   B   C
0  1   8   4 
1  3   9   6
2  22 33  52

如果我们想修改单元格 [0,"A"] 的值,我们可以这样做

df.iat[0,0] = 2

df.at[0,'A'] = 2

另一种方法是,根据行的索引位置为给定行分配列值,索引位置始终从零开始,最后一个索引位置是数据帧的长度:

df["COL_NAME"].iloc[0]=x

修改“r”行(“A”列)和“C”列交叉处的单元格中的值

  1. 检索“A”列中“r”行的索引

     i = df[ df['A']=='r' ].index.values[0]
  2. 修改所需列“C”中的值

     df.loc[i,"C"]="newValue"

注意:之前,一定要重置行的索引......以获得一个漂亮的索引列表!

        df=df.reset_index(drop=True)

另一种方法是获取行索引,然后使用 df.loc 或 df.at。

# get row index 'label' from row number 'irow'
label = df.index.values[irow] 
df.at[label, 'COL_NAME'] = x

扩展建勋的答案,在熊猫中使用set_value方法。 它为给定索引处的列设置值。

来自熊猫文档:

DataFrame.set_value(index, col, value)

要在列的特定索引处设置值,请执行以下操作:

df.set_value(index, 'COL_NAME', x)

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM