问题
如何根据pandas DataFrame 的值创建带有占位符(即“f-string”之类的)的字符串列表?
例子
想象一下我有以下数据框:
import pandas as pd
data = [
['Alice', 13, 'apples'],
['Bob', 17, 'bananas']
]
df = pd.DataFrame(
data,
columns=['name', 'qty', 'fruit']
)
Run Code Online (Sandbox Code Playgroud)
如何使用类似f"{name} ate {qty} {fruit}"模式创建字符串列表?
换句话说,如何创建以下列表:
[
'Alice ate 13 apples',
'Bob ate 17 bananas'
]
Run Code Online (Sandbox Code Playgroud) 我是新来的,也是 Python 的新手。我不知道是什么f在print(f'Column names are {"-".join(row)}')做我试着删除它,然后“列名是{‘ - ’加入(行)}”成为普通的字符串
你能告诉我什么f叫,所以我可以谷歌了解更多信息吗?谢谢你们。
import csv
with open('CSV_test.txt') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are {"-".join(row)}')
line_count += 1
else:
print(f'\t{row[0]} works in the {row[1]} '
f'department, and was born in {row[2]}.')
line_count += 1
print(f'Processed {line_count} lines.')
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以动态更改/替换 f 字符串变量之一?假设我的格式如下:
expected = f'{var} {self.some_evaluation_1(var)} {self.some_evaluation_2(var)}'
Run Code Online (Sandbox Code Playgroud)
然后我有带有多个断言的测试用例:
var1='some value 1'
var2='some value 2'
var3='some value 3'
var=var1
self.assertEqual('some great value1', expected)
var=var2
self.assertEqual('some great value2', expected)
var=var3
self.assertEqual('some great value3', expected)
Run Code Online (Sandbox Code Playgroud)
有没有办法让 f-string 使用我的变量而不是以初始格式定义?
# Let's say something like this? It's just a concept I know it doesn't work.
self.assertEqual('some great value1', expected % var1)
Run Code Online (Sandbox Code Playgroud) 当我尝试在 Python 3.7 中使用 f-string 语法组合字符串时出现错误。
我的代码如下:
i = 1
site_id= 0
meter = 0
model_id = i
target_name = 'log1p_meter_reading_corrected2'
f'model_site_id_{str(site_id)}_meter_{str(meter)}_{target_name}_model_id_{str(model_id)}_11_12_19.hdf5'
Run Code Online (Sandbox Code Playgroud)
返回错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-68-1ebe1c78d868> in <module>
6 target_name = 'log1p_meter_reading_corrected2'
7
----> 8 f'model_site_id_{str(site_id)}_meter_{str(meter)}_{target_name}_model_id_{str(model_id)}_11_12_19.hdf5'
TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)
是什么导致了错误,我应该如何更正我的代码?
我想知道如何从此开始:
mylist = [10, 20, 30]
Run Code Online (Sandbox Code Playgroud)
对此:
'Quantity 10, quantity 20 quantity 30'
Run Code Online (Sandbox Code Playgroud)
我知道可以通过以下方式完成:
mystring = f"Quantity {mylist[0]}, quantity {mylist[1]} quantity {mylist[2]}"
Run Code Online (Sandbox Code Playgroud)
但是有没有一种方法可以在构造 f 字符串时合并 for 循环,而不必一一提供所有列表索引?
编辑:Quantity、quantity、 和quantity恰好是同一个字符串,但它们可以是“ Quantity10, rank20 kingdom and sovrenity30”之类的任何内容。因此,数字之间会有不同的文本。
我有一个 GraphQL 查询字符串
query = """
{
scripts(developers: "1") {
...
...
}
}
"""
Run Code Online (Sandbox Code Playgroud)
问:如何developers使用 Python 字符串格式化技术更改 的值?
到目前为止我所尝试过的
1.使用f字符串
In [1]: query = f"""
...: {
...: scripts(developers: "1") {
...:
...: ...
...: ...
...: }
...: }
...: """
File "<fstring>", line 2
scripts(developers: "1") {
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
2.使用.format()方法
In [2]: query = """
...: {
...: scripts(developers: "{dev_id}") {
...:
...: ...
...: ...
...: }
...: } …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建给定宽度的标题并想使用
>>> print(f'{"string":15<}|')
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: Unknown format code '<' for object of type 'str'
Run Code Online (Sandbox Code Playgroud)
我们是否打算像这样拼凑标题,还是我遗漏了有关 f 字符串的内容?
print('string'+" "*(15-len('string'))+"|")
string |
Run Code Online (Sandbox Code Playgroud) 是否可以在“=”表达式中转义 python f 字符串?(Python 3.8 中的新功能)
例如我有以下表达式:
def double(x):
return x * 2
some_int = 2
print(f'{double(some_int) = }')
Run Code Online (Sandbox Code Playgroud)
哪个打印:
double(some_int) = 4
Run Code Online (Sandbox Code Playgroud)
是否可以以some_int某种方式转义参数,以便打印:
double(2) = 4
Run Code Online (Sandbox Code Playgroud)
或者我是否必须输入表达式两次并以老式方式连接文字表达式和结果?
例如两个数字123456789, 12345678, 我想要逗号千位并对齐最右边的数字。
123,456,789
12,345,678
Run Code Online (Sandbox Code Playgroud)
我必须
f'{val:,}'将逗号放在适当的位置,但这会将行与第一列中的 1 对齐。
我尝试f'{val:,____}过各种组合、值、方向,_____但是——不。我什至尝试过嵌套 f 字符串(不起作用,仅供参考)
我该怎么做呢?
我有一个python字符串,基本上是3个变量的串联.我用f-strings它来使它成为一个字符串.它现在看起来像这样:
my_string = f'{getattr(RequestMethodVerbMapping, self.request_method).value} {self.serializer.Meta.model.__name__} {self.request_data['name']}'
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
Create IPGroup test-create-demo-098
Run Code Online (Sandbox Code Playgroud)
正是我想要的输出.然而,很明显线条太长了,现在Pylint开始抱怨所以我尝试使用多线分解线f-strings,如下所示:
my_string = f'''{getattr(RequestMethodVerbMapping, self.request_method).value}
{self.serializer.Meta.model.__name__} {self.request_data['name']}'''
Run Code Online (Sandbox Code Playgroud)
Pylint现在很高兴,但我的字符串看起来像这样:
Create
IPGroup test-create-demo-098
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方法是什么,这样我就可以将我的字符串放在一行中,并且还可以使Pylint静音超过120个字符的行?