pandas to_markdown不传递intfmt到制表

brvekthn  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(105)

逗号分隔似乎没有Pandas DataFrame也能正常工作。执行

from tabulate import tabulate
print(tabulate([['2023m06',2000],['2023m05',100000]], 
               tablefmt='rounded_grid', 
               intfmt=','))

字符串
给了我

╭─────────┬─────────╮
│ 2023m06 │   2,000 │
├─────────┼─────────┤
│ 2023m05 │ 100,000 │
╰─────────┴─────────╯


如所料。但是当我尝试使用Pandas DataFrame时

import pandas as pd
test = {'2023m06': [2000], '2023m05': [100000]}
df = pd.DataFrame.from_dict(test,
                            orient='index',
                            columns=['myColumn'])
print(df.to_markdown(tablefmt='rounded_grid',
                     intfmt=','))


我的结果

╭─────────┬────────────╮
│         │   myColumn │
├─────────┼────────────┤
│ 2023m06 │       2000 │
├─────────┼────────────┤
│ 2023m05 │     100000 │
╰─────────┴────────────╯


没有逗号。有人能看出我做错了什么吗?

atmip9wb

atmip9wb1#

我不知道为什么,但是如果我使用floatfmt而不是intfmt,那么我就会得到你想要的结果。

import pandas as pd
test = {'2023m06': [2000], '2023m05': [100000]}
df = pd.DataFrame.from_dict(test,
                            orient='index',
                            columns=['myColumn'])
print(df.to_markdown(tablefmt='rounded_grid',floatfmt=',.0f'))

╭─────────┬────────────╮
│         │   myColumn │
├─────────┼────────────┤
│ 2023m06 │      2,000 │
├─────────┼────────────┤
│ 2023m05 │    100,000 │
╰─────────┴────────────╯

字符串
包括另一个多列的示例,因为在我的例子中需要这样做。

import pandas as pd
test = {'2023m06': [2000], '2023m05': [100000]}
df = pd.DataFrame.from_dict(test,
                            orient='index',
                            columns=['myColumn'])
df['%'] = df['myColumn']/df['myColumn'].sum()
print(df.to_markdown(tablefmt='rounded_grid',floatfmt=(None,',.0f','.2%')))

╭─────────┬────────────┬────────╮
│         │   myColumn │      % │
├─────────┼────────────┼────────┤
│ 2023m06 │      2,000 │  1.96% │
├─────────┼────────────┼────────┤
│ 2023m05 │    100,000 │ 98.04% │
╰─────────┴────────────┴────────╯

lqfhib0f

lqfhib0f2#

在Pandas中使用df.to_markdown()时,intfmt参数默认不支持逗号分隔。它被设计为将整数值格式化为普通数字。要在markdown输出中实现逗号分隔,可以在调用to_markdown()之前预处理DataFrame列。下面是一个例子:

import pandas as pd

test = {'2023m06': [2000], '2023m05': [100000]}
df = pd.DataFrame.from_dict(test, orient='index', columns=['myColumn'])

# Preprocess the column to include comma separation
df['myColumn'] = df['myColumn'].apply(lambda x: format(x, ","))

# Convert DataFrame to markdown with comma-separated integers
markdown_output = df.to_markdown(tablefmt='rounded_grid')

print(markdown_output)

字符串
上面的代码使用一个lambda函数和format(x, ",")'myColumn'列中的整数转换为逗号分隔的字符串。然后,在修改后的DataFrame上调用df.to_markdown(),得到所需的markdown输出,其中整数值带有逗号。

╭─────────┬────────────╮
│         │ myColumn   │
├─────────┼────────────┤
│ 2023m06 │ 2,000      │
├─────────┼────────────┤
│ 2023m05 │ 100,000    │
╰─────────┴────────────╯

相关问题