簡體   English   中英

如何將 Pandas DataFrame 變成 Discord 嵌入?

[英]How do I turn a Pandas DataFrame into a Discord Embed?

我目前正在研究 Discord Bot,它從 Google 電子表格中獲取數據並將其轉換為 Pandas DataFrame。 使用所述 DataFrame,Bot 然后輸出用戶要求的特定數據。 電子表格如下所示: 名稱 | 氏族 | 國家 | 注釋(這些是列,行中是大約 1000 名游戲玩家的相應信息)。 我在完整的基礎上創建了幾個不同的 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', ... }

現在,機器人的一個 function 是 output 的每個 Clan 成員,使用以下代碼:

# 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 成為 output 作為 Discord 嵌入,其標題是每個玩家的名稱。 我在想最聰明的方法可能是一段時間 function,但我似乎無法正確實現它。

提前感謝您的回答。

有點晚了,但希望這會有所幫助。

pip 安裝散景

下載 geckodriver & chormedriver 並將它們的路徑添加到您的環境變量中

然后嘗試將 dataframe 轉換為 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)```

 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM