python - 如何在fstrings中使用.loc?

标签 python string pandas indexing f-string

我有一个像这样的数据框:

import pandas as pd

df = pd.DataFrame({'col1': ['abc', 'def', 'tre'],
                   'col2': ['foo', 'bar', 'stuff']})

  col1   col2
0  abc    foo
1  def    bar
2  tre  stuff

和这样的字典:

d = {'col1': [0, 2], 'col2': [1]}

字典包含要从数据帧中提取的列名称和值索引,以生成如下字符串:

abc (0, col1)

因此,每个字符串都以元素本身开头,并在括号中显示索引和列名称。

我尝试了以下列表理解:

l = [f"{df.loc[{indi}, {ci}]} ({indi}, {ci})"
     for ci, vali in d.items()
     for indi in vali]

产生

['  col1\n0  abc (0, col1)',
 '  col1\n2  tre (2, col1)',
 '  col2\n1  bar (1, col2)']

所以,几乎没问题,只是需要避免 col1\n0 部分。

如果我尝试

f"{df.loc[0, 'col1']} is great"

我明白了

'abc is great'

但是,根据需要

x = 0
f"{df.loc[{x}, 'col1']} is great"

我明白了

'0    abc\nName: col1, dtype: object is great'

如何解决这个问题?

最佳答案

您所看到的是 loc 返回的 pd.Series 对象的字符串表示形式和丑陋的换行符 \n 字符访问器(accessor)。

您应该使用pd.DataFrame.at返回标量,并注意这里不需要为索引标签使用嵌套的 {}:

L = [f'{df.at[indi, ci]} ({indi}, {ci})' \
     for ci, vali in d.items() \
     for indi in vali]

print(L)

['abc (0, col1)', 'tre (2, col1)', 'bar (1, col2)']

关于python - 如何在fstrings中使用.loc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52643774/

相关文章:

Python 类输入参数

python - 为什么 scipy 线性插值比最近邻插值运行得更快?

python - 如何在 Python 中移动终端光标?

python - 如何将字符串转换为整数并将它们相加?

python - Pandas :根据与另一列名称部分匹配的列值创建新列

python - 将文件上传到 YouTube 时出现 404 错误

python - 变量初始化后如何制作字符串f-string?

python - 如何将背景颜色添加到 pandas 数据框的特定列并将该彩色数据框保存到同一个 csv 中?

python - 用 Pandas 删除一列中的非数字行

java - java字符串文字可以被垃圾收集吗?如果是,如何证明?