Jupyter Notebook生成带引号列名的value_counts代码问题
问题:循环生成DataFrame列value_counts代码时列名不带引号的问题
我编写了一个用于在Jupyter Notebook中创建新单元格的函数,尝试通过循环生成DataFrame各列的value_counts()代码,但遇到的问题是生成的代码中列名无法带上引号,总是固定显示为col。当前代码如下:
def create_new_cell(contents): shell = get_ipython() payload = dict( source='set_next_input', text=contents, replace=False, ) shell.payload_manager.write_payload(payload, single=False) def show_vc(col): col = (f'(col)') content = "df[{col_name}].value_counts()"\ .format(col_name=col) create_new_cell(content)
我尝试将col = (f'(col)')替换为col = str(col)或col = "(col)"等方式都无效,希望解决该问题,使得执行以下循环时能生成正确的代码:
for x in df.columns: show_vc(x)
问题原因
问题核心在于show_vc函数中的col = (f'(col)')这行代码:你这里是把固定字符串'(col)'赋值给了变量col,完全覆盖了传入的列名参数。后续格式化字符串时,自然只会替换成col,而且没有添加引号来包裹列名。
修正后的代码
直接删除那行错误的赋值代码,在格式化字符串时给列名加上单引号即可:
def create_new_cell(contents): shell = get_ipython() payload = dict( source='set_next_input', text=contents, replace=False, ) shell.payload_manager.write_payload(payload, single=False) def show_vc(col): # 直接使用传入的col参数,格式化时添加单引号包裹列名 content = "df['{col_name}'].value_counts()".format(col_name=col) create_new_cell(content)
或者使用f-string写法更简洁:
def show_vc(col): content = f"df['{col}'].value_counts()" create_new_cell(content)
效果验证
现在执行循环:
for x in df.columns: show_vc(x)
每个生成的新单元格中都会出现类似df['列名'].value_counts()的正确代码,列名被单引号包裹,直接运行就能查看对应列的数值统计结果。
内容的提问来源于stack exchange,提问作者E_Sarousi
相关产品推荐
相关产品推荐

