为什么 f 字符串格式不适用于 Pandas DataFrames?
Why doesn't f-strings formatting work for Pandas DataFrames?
给定一个带有 Product Id
和 Amount
的 DataFrame:
df = pd.DataFrame([['504145', 12000.0],
['555933', 23010.5]],
columns=['Product Id', 'Amount'])
df
Out[1]:
Product Id Amount
0 504145 12000.0
1 555933 23010.5
我想添加一个基于 Amount
的 "Description" 列,预计如下所示:
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
当我使用 f-strings 格式时,结果是将整个列 Amount
聚合为一个系列,而不是使用特定行的值进行字符串连接:
df['Description'] = f'Amount is {df["Amount"].astype(str)}'
df
Out[2]:
Product Id Amount Description
0 504145 12000.0 Amount is 0 12000.0\n1 23010.5\nName: Am...
1 555933 23010.5 Amount is 0 12000.0\n1 23010.5\nName: Am...
但是,使用 +
:
进行简单的字符串连接时效果很好
df['Description'] = "Amount is " + df["Amount"].astype(str)
df
Out[9]:
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
为什么 Pandas DataFrame 中的 f 字符串格式会这样?我应该如何修复它以使用 f-strings 格式?或者不建议在 Pandas?
中使用 f-strings 格式进行字符串连接
您需要对每个值进行迭代,例如通过 apply
:
df['Description'] = df["Amount"].apply(lambda x: f'Amount is {x}')
或通过列表理解:
df['Description'] = [f'Amount is {x}' for x in df["Amount"]]
print (df)
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
您的解决方案:
df['Description'] = f'Amount is {df["Amount"].astype(str)}'
工作方式不同 - 它将 Series 的每个值(也带有索引)附加到字符串并像常量一样重复新列的所有值。
给定一个带有 Product Id
和 Amount
的 DataFrame:
df = pd.DataFrame([['504145', 12000.0],
['555933', 23010.5]],
columns=['Product Id', 'Amount'])
df
Out[1]:
Product Id Amount
0 504145 12000.0
1 555933 23010.5
我想添加一个基于 Amount
的 "Description" 列,预计如下所示:
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
当我使用 f-strings 格式时,结果是将整个列 Amount
聚合为一个系列,而不是使用特定行的值进行字符串连接:
df['Description'] = f'Amount is {df["Amount"].astype(str)}'
df
Out[2]:
Product Id Amount Description
0 504145 12000.0 Amount is 0 12000.0\n1 23010.5\nName: Am...
1 555933 23010.5 Amount is 0 12000.0\n1 23010.5\nName: Am...
但是,使用 +
:
df['Description'] = "Amount is " + df["Amount"].astype(str)
df
Out[9]:
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
为什么 Pandas DataFrame 中的 f 字符串格式会这样?我应该如何修复它以使用 f-strings 格式?或者不建议在 Pandas?
中使用 f-strings 格式进行字符串连接您需要对每个值进行迭代,例如通过 apply
:
df['Description'] = df["Amount"].apply(lambda x: f'Amount is {x}')
或通过列表理解:
df['Description'] = [f'Amount is {x}' for x in df["Amount"]]
print (df)
Product Id Amount Description
0 504145 12000.0 Amount is 12000.0
1 555933 23010.5 Amount is 23010.5
您的解决方案:
df['Description'] = f'Amount is {df["Amount"].astype(str)}'
工作方式不同 - 它将 Series 的每个值(也带有索引)附加到字符串并像常量一样重复新列的所有值。