如何有条件地将 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
我有一个 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