如何有条件地将 pandas DataFrame 值更改为 f 字符串?

How to conditionally change pandas DataFrame values into f-strings?

我有一个 pandas DataFrame,我想有条件地将其值更改为字符串而不循环遍历每个值。

示例输入:

In [1]: df = pd.DataFrame(data = [[1,2], [4,5]], columns = ['a', 'b'])
Out[2]:
   a  b
0  1  2
1  4  5

这是我最好的尝试,但效果不佳

df['a'] = np.where(df['a'] < 3, f'string-{df["a"]}', df['a'])

In [1]: df
Out[2]:
    a                                       b
0   string0 1\n1 4\nName: a, dtype: int64   2
1   4                                       5

期望的输出:

Out[2]:
   A         B
0  string-1  2
1  4         5

我正在使用 np.where(),因为由于实际 DataFrame 的大小,循环不可行。我实际使用的 f-string 也更复杂,有两个包含列名的变量,但问题是一样的。

是否有其他方法可以有条件地将 pandas 值更改为 f 字符串而不循环遍历每个值?

可以将.map()和f-string一起使用,如下:

df['a'] = df['a'].map(lambda x: f'string-{x}' if x < 3 else x)

或者,您也可以将 .loc 与字符串连接一起使用,如下所示:

df.loc[df['a'] < 3, 'a'] = 'string-' + df['a'].astype(str)
#OR
df['a']=np.where(df['a'] < 3, 'string-'+df['a'].astype(str), df['a'])

结果:

print(df)

          a  b
0  string-1  2
1         4  5