擅长:python、mysql、java
<p>有几种方法可以做到这一点。两者都需要将数据转换为<code>object</code>类型,以便将字符串分配给以前的<code>float</code>序列。你知道吗</p>
<h2>选项1:numpy</h2>
<p>这要求您通过整数数组或元组列表输入坐标。你知道吗</p>
<pre><code>import numpy as np
# convert to numpy object array
vals = df.values.astype(object)
# transform coordinates
coords = [(3, 0), (0, 1), (4, 2)]
idx = np.r_[coords].T
# apply indices
vals[idx[0], idx[1]] = 'spam'
# create new dataframe
res = pd.DataFrame(vals, index=df.index, columns=df.columns)
print(res)
A B C
0 0.1 spam 0.07
1 0.4 0.3 0.3
2 0.7 0.17 0.13
3 spam 0.04 0.24
4 0.15 0.07 spam
</code></pre>
<h2>方案2:pd.DataFrame.at数据帧你知道吗</h2>
<p>一个非矢量化但更直接的解决方案是在<code>for</code>循环中使用<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.at.html" rel="nofollow noreferrer">^{<cd3>}</a>:</p>
<pre><code>coords = [(3, 'A'), (0, 'B'), (4, 'C')]
df = df.astype(object)
for row, col in coords:
df.at[row, col] = 'spam'
print(df)
A B C
0 0.1 spam 0.07
1 0.4 0.3 0.3
2 0.7 0.17 0.13
3 spam 0.04 0.24
4 0.15 0.07 spam
</code></pre>