gpt4 book ai didi

python - 如何将 Pandas DataFrame 转换为 Discord Embed?

转载 作者:行者123 更新时间:2023-12-04 17:20:23 25 4
gpt4 key购买 nike

我目前正在开发一个 Discord 机器人,它从 Google 电子表格中获取数据并将其转换为 Pandas DataFrame。然后,使用所述 DataFrame,Bot 输出用户要求的特定数据。电子表格如下所示:名称 |氏族 |国家 |注释(这些是列,行中是大约 1000 名游戏玩家的相应信息)。我基于完整的 DataFrame 创建了几个不同的 DataFrame:

# Fields
fields_with_clan = ['Name', 'Clan']
fields_just_name = ['Name']
fields_with_country = ['Name', 'Country']
fields_fullinfo = ['Name', 'Clan', 'Country']
fields_countries_only = ['Country']

# Respective DataFrames for each field
df = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv")
df_players_clans = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_with_clan)
df_players = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_just_name)
df_players_countries = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_with_country)
df_players_fullinfo = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_fullinfo)
df_countries_only = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_countries_only)

我还创建了一个字典,将氏族的常用拼写(缩写)翻译成电子表格中使用的完整名称:

Dict_Clans = {'zt': 'Zero Tolerance - ƵŦ✿', 'kaveh': 'Kaveh - :K', 'dw': 'Deadly Warriors - Ðฬ',
'nf': 'Next Force - NF', ... }

现在,机器人的一个功能是使用以下代码输出部落的每个成员:

# List all members of given clan
@client.command(name='members')
async def members(context, *, index: str):
if df_players[df_players_clans.values == [Dict_Clans.get(index)]].empty != True:
await context.message.channel.send(df_players[df_players_clans.values == [Dict_Clans.get(index)]])
else:
await context.message.channel.send("Unfortunately, we don't have '" + index + "' in our Database.")

这行得通;例如如果用户输入“?members zt”,Bot 会输出一个 DataFrame,其中包含属于 ZT 战队的所有玩家。问题是,它在 Discord 上看起来不太漂亮。我希望 DataFrame 输出为 Discord Embed,其标题是每个玩家的名字。我在想最聪明的方法可能是 while 函数,但我似乎无法正确实现它。

提前感谢您的回答。

最佳答案

有点晚了,但希望这对您有所帮助。

pip 安装 Bokeh

下载 geckodriver 和 chormedriver 并将它们的路径添加到您的环境变量

然后尝试将数据框转换为 png。

from bokeh.io import export_png, export_svgs
from bokeh.models import ColumnDataSource, DataTable, TableColumn

def load_from_gspreadsheet(sheet_name, key):
url = 'https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet={sheet_name}&headers=1'.format(
key=key, sheet_name=sheet_name.replace(' ', '%20'))


def save_df_as_image(df, path):
source = ColumnDataSource(df)
df_columns = [df.index.name]
df_columns.extend(df.columns.values)
columns_for_table=[]
print(df_columns)
for column in df_columns:
if column != None:
columns_for_table.append(TableColumn(field=column, title=column))

data_table = DataTable(source=source, columns=columns_for_table,height_policy="auto",width_policy="auto",index_position=None)
export_png(data_table, filename = path)


@bot.command()
async def fetch(ctx):
df = load_from_gspreadsheet(sheet_name, spreadsheet_id)
pt = os.getcwd()
save_df_as_image(df, os.path.join(pt,'plot.png'))
file=discord.File('plot.png')
e = discord.Embed()
e.set_image(url="attachment://plot.png")
# await ctx.send(file=discord.File('plot.png'))
await ctx.send(file = file, embed = e)```


关于python - 如何将 Pandas DataFrame 转换为 Discord Embed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66551338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com